Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions src/main/antlr4/grammar/MathLexer.g4
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
lexer grammar MathLexer;

GREEK
// small
: 'alfa' | 'alpha' | 'beta' | 'gamma' | 'delta' | 'epsilon' | 'varepsilon'
| 'zeta' | 'eta' | 'theta' | 'vartheta' | 'iota' | 'kappa' | 'kapa' | 'lambda'
| 'mu' | 'nu' | 'xi' | 'omicron' | 'pi' | 'varpi' | 'rho' | 'varrho'
| 'sigma' | 'varsigma' | 'tau' | 'upsilon' | 'phi' | 'fi' | 'varphi' | 'chi'
| 'psi' | 'omega'

// Big
| 'Gamma' | 'Delta' | 'Theta' | 'Lambda' | 'Xi' | 'Pi' | 'Sigma'
| 'Upsilon' | 'Phi' | 'Fi' | 'Psi' | 'Omega'
;

INFINITY : 'nieskonczonosc' | 'infty' | 'infinity' | 'oo' | 'inf';
// Operatory - KOLEJNOŚĆ MA ZNACZENIE
DIV_BLOCK : '//' ; // To będzie nasz \frac{}{}
DIV_LINE : '/' ; // To zostanie jako zwykły slash /
Expand Down
15 changes: 9 additions & 6 deletions src/main/antlr4/grammar/MathParser.g4
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,14 @@ options { tokenVocab=MathLexer; }
program : expression EOF ;

expression
: (L_CURLY | L_BRACKET) expression (R_CURLY | R_BRACKET) # Grouping
| left=expression HAT right=expression # Power
| left=expression right=expression # ImplicitMul // TA LINIA TO KLUCZ
: (L_CURLY | L_BRACKET) expression (R_CURLY | R_BRACKET) # Grouping
| (PLUS | MINUS) expression # UnarySign
| left=expression HAT right=expression # Power
| left=expression right=expression # ImplicitMul
| left=expression (MUL | DIV_BLOCK | DIV_LINE) right=expression # MultDiv
| left=expression (PLUS | MINUS) right=expression # AddSub
| ID # Variable
| INT # Constant
| left=expression (PLUS | MINUS) right=expression # AddSub
| ID # Variable
| GREEK # Greek
| INFINITY # Infinity
| INT # Constant
;
1 change: 1 addition & 0 deletions src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import grammar.MathLexer;
import grammar.MathParser;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/visitors/AlgebraVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,10 @@ public String visitImplicitMul(MathParser.ImplicitMulContext ctx) {
public String visitPower(MathParser.PowerContext ctx) {
return main.visit(ctx.left) + "^{" + main.visit(ctx.right) + "}";
}
public String visitUnarySign(MathParser.UnarySignContext ctx) {
String sign = ctx.getChild(0).getText();
String expr = main.visit(ctx.expression());
return sign + expr;
}

}
3 changes: 3 additions & 0 deletions src/main/java/visitors/BasicVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,7 @@ public String visitGrouping(MathParser.GroupingContext ctx) {
String content = main.visit(ctx.expression());
return ctx.getText().startsWith("{") ? content : "(" + content + ")";
}
public String visitInfinity(MathParser.InfinityContext ctx) {
return "\\infty";
}
}
9 changes: 9 additions & 0 deletions src/main/java/visitors/MainVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ public class MainVisitor extends MathParserBaseVisitor<String> {
private final AnalysisVisitor analysis = new AnalysisVisitor(this);
private final MatrixVisitor matrix = new MatrixVisitor(this);

private final GreekVisitor greek = new GreekVisitor(this);

@Override
public String visitProgram(MathParser.ProgramContext ctx) {
return visit(ctx.expression());
Expand All @@ -26,6 +28,13 @@ public String visitProgram(MathParser.ProgramContext ctx) {
@Override public String visitMultDiv(MathParser.MultDivContext ctx) { return algebra.visitMultDiv(ctx); }
@Override public String visitImplicitMul(MathParser.ImplicitMulContext ctx) { return algebra.visitImplicitMul(ctx); }
@Override public String visitPower(MathParser.PowerContext ctx) { return algebra.visitPower(ctx); }
@Override public String visitUnarySign(MathParser.UnarySignContext ctx) {return algebra.visitUnarySign(ctx);}

// Tu w przyszłości dodasz metody dla Analysis (całki) i Matrix (macierze)




@Override public String visitGreek(MathParser.GreekContext ctx) { return greek.visitGreek(ctx); }
@Override public String visitInfinity(MathParser.InfinityContext ctx) { return basic.visitInfinity(ctx);}
}