Skip to content

Commit

Permalink
Implement parsing of exponent ('^') operators.
Browse files Browse the repository at this point in the history
  • Loading branch information
icculus committed Nov 20, 2017
1 parent 5b04f5a commit a4902ff
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 1 deletion.
7 changes: 6 additions & 1 deletion mojobasic_compiler.cpp
Expand Up @@ -227,6 +227,7 @@ class AstPrinterVisitor : public AstVisitor
virtual void visit(AstMultiplyExpression *node) { visitBinaryExpr(node, "*"); }
virtual void visit(AstDivideExpression *node) { visitBinaryExpr(node, "/"); }
virtual void visit(AstIntegerDivideExpression *node) { visitBinaryExpr(node, "\\"); }
virtual void visit(AstExponentExpression *node) { visitBinaryExpr(node, "^"); }
virtual void visit(AstModuloExpression *node) { visitBinaryExpr(node, "MOD"); }
virtual void visit(AstAddExpression *node) { visitBinaryExpr(node, "+"); }
virtual void visit(AstSubtractExpression *node) { visitBinaryExpr(node, "-"); }
Expand Down Expand Up @@ -346,7 +347,9 @@ class AstPrinterVisitor : public AstVisitor

virtual void visit(AstIfStatement *node) {
printf("IF "); node->expr->accept(this); printf(" THEN\n");
node->block->accept(this);
if (node->block) {
node->block->accept(this);
}
if (node->else_block) {
printIndent();
printf("ELSE\n");
Expand Down Expand Up @@ -538,6 +541,8 @@ class AstSemanticAnalysisVisitor : public AstVisitor

virtual void visit(AstMultiplyExpression *node) { visitBinaryMathExpression(node); }
virtual void visit(AstDivideExpression *node) { visitBinaryMathExpression(node); }
virtual void visit(AstIntegerDivideExpression *node) { visitBinaryMathExpression(node); }
virtual void visit(AstExponentExpression *node) { visitBinaryMathExpression(node); }
virtual void visit(AstModuloExpression *node) { visitBinaryMathExpression(node); }
virtual void visit(AstAddExpression *node) { visitBinaryMathExpression(node); }
virtual void visit(AstSubtractExpression *node) { visitBinaryMathExpression(node); }
Expand Down
3 changes: 3 additions & 0 deletions mojobasic_internal_llvm.h
Expand Up @@ -59,6 +59,7 @@ struct AstNotExpression;
struct AstMultiplyExpression;
struct AstDivideExpression;
struct AstIntegerDivideExpression;
struct AstExponentExpression;
struct AstModuloExpression;
struct AstAddExpression;
struct AstSubtractExpression;
Expand Down Expand Up @@ -112,6 +113,7 @@ class AstVisitor
virtual void visit(AstMultiplyExpression *node) = 0;
virtual void visit(AstDivideExpression *node) = 0;
virtual void visit(AstIntegerDivideExpression *node) = 0;
virtual void visit(AstExponentExpression *node) = 0;
virtual void visit(AstModuloExpression *node) = 0;
virtual void visit(AstAddExpression *node) = 0;
virtual void visit(AstSubtractExpression *node) = 0;
Expand Down Expand Up @@ -301,6 +303,7 @@ struct AstBinaryExpression : public AstExpression
AST_BINARY_EXPR_STRUCT(Multiply, MULTIPLY);
AST_BINARY_EXPR_STRUCT(Divide, DIVIDE);
AST_BINARY_EXPR_STRUCT(IntegerDivide, DIVIDE);
AST_BINARY_EXPR_STRUCT(Exponent, EXPONENT);
AST_BINARY_EXPR_STRUCT(Modulo, MODULO);
AST_BINARY_EXPR_STRUCT(Add, ADD);
AST_BINARY_EXPR_STRUCT(Subtract, SUBTRACT);
Expand Down
1 change: 1 addition & 0 deletions mojobasic_parser.cpp
Expand Up @@ -1384,6 +1384,7 @@ static AstExpression *newAstExpressionByOperator(const SourcePosition &position,
case TOKEN_XOR: return new AstBinaryXorExpression(position, l, r);
case TOKEN_EQV: return new AstBinaryEqvExpression(position, l, r);
case TOKEN_IMP: return new AstBinaryImpExpression(position, l, r);
case TOKEN_EXPONENT: return new AstExponentExpression(position, l, r);
default: break;
} // switch

Expand Down

0 comments on commit a4902ff

Please sign in to comment.