diff --git a/test/parser/binop.al b/test/parser/binop.al new file mode 100644 index 0000000..31681a1 --- /dev/null +++ b/test/parser/binop.al @@ -0,0 +1,118 @@ +// RUN: compiler %s -ast-dump 2>&1 | filecheck %s +fn main(): void { + // CHECK: [[# @LINE + 1 ]]:11: error: expected expression + 1.0 + |; + + // CHECK: [[# @LINE + 1 ]]:17: error: expected expression + 1.0 + 1.0 + |; + + // CHECK: [[# @LINE + 1 ]]:17: error: expected expression + 1.0 + 1.0 * |; + + 1.0 * 2.0 * 3.0; + // CHECK: BinaryOperator: '*' + // CHECK-NEXT: BinaryOperator: '*' + // CHECK-NEXT: NumberLiteral: '1.0' + // CHECK-NEXT: NumberLiteral: '2.0' + // CHECK-NEXT: NumberLiteral: '3.0' + + 1.0 / 2.0 / 3.0; + // CHECK: BinaryOperator: '/' + // CHECK-NEXT: BinaryOperator: '/' + // CHECK-NEXT: NumberLiteral: '1.0' + // CHECK-NEXT: NumberLiteral: '2.0' + // CHECK-NEXT: NumberLiteral: '3.0' + + 1.0 / 2.0 * 3.0; + // CHECK: BinaryOperator: '*' + // CHECK-NEXT: BinaryOperator: '/' + // CHECK-NEXT: NumberLiteral: '1.0' + // CHECK-NEXT: NumberLiteral: '2.0' + // CHECK-NEXT: NumberLiteral: '3.0' + + 1.0 + 2.0 + 3.0; + // CHECK: BinaryOperator: '+' + // CHECK-NEXT: BinaryOperator: '+' + // CHECK-NEXT: NumberLiteral: '1.0' + // CHECK-NEXT: NumberLiteral: '2.0' + // CHECK-NEXT: NumberLiteral: '3.0' + + 1.0 - 2.0 - 3.0; + // CHECK: BinaryOperator: '-' + // CHECK-NEXT: BinaryOperator: '-' + // CHECK-NEXT: NumberLiteral: '1.0' + // CHECK-NEXT: NumberLiteral: '2.0' + // CHECK-NEXT: NumberLiteral: '3.0' + + 1.0 + 2.0 - 3.0; + // CHECK: BinaryOperator: '-' + // CHECK-NEXT: BinaryOperator: '+' + // CHECK-NEXT: NumberLiteral: '1.0' + // CHECK-NEXT: NumberLiteral: '2.0' + // CHECK-NEXT: NumberLiteral: '3.0' + + 1.0 + 2.0 * 3.0 + 4.0; + // CHECK: BinaryOperator: '+' + // CHECK-NEXT: BinaryOperator: '+' + // CHECK-NEXT: NumberLiteral: '1.0' + // CHECK-NEXT: BinaryOperator: '*' + // CHECK-NEXT: NumberLiteral: '2.0' + // CHECK-NEXT: NumberLiteral: '3.0' + // CHECK-NEXT: NumberLiteral: '4.0' + + 1.0 + 2.0 / 3.0 - 4.0; + // CHECK: BinaryOperator: '-' + // CHECK-NEXT: BinaryOperator: '+' + // CHECK-NEXT: NumberLiteral: '1.0' + // CHECK-NEXT: BinaryOperator: '/' + // CHECK-NEXT: NumberLiteral: '2.0' + // CHECK-NEXT: NumberLiteral: '3.0' + // CHECK-NEXT: NumberLiteral: '4.0' + + 1.0 < 2.0 < 3.0; + // CHECK: BinaryOperator: '<' + // CHECK-NEXT: BinaryOperator: '<' + // CHECK-NEXT: NumberLiteral: '1.0' + // CHECK-NEXT: NumberLiteral: '2.0' + // CHECK-NEXT: NumberLiteral: '3.0' + + 1.0 > 2.0 > 3.0; + // CHECK: BinaryOperator: '>' + // CHECK-NEXT: BinaryOperator: '>' + // CHECK-NEXT: NumberLiteral: '1.0' + // CHECK-NEXT: NumberLiteral: '2.0' + // CHECK-NEXT: NumberLiteral: '3.0' + + 1.0 == 2.0 == 3.0; + // CHECK: BinaryOperator: '==' + // CHECK-NEXT: BinaryOperator: '==' + // CHECK-NEXT: NumberLiteral: '1.0' + // CHECK-NEXT: NumberLiteral: '2.0' + // CHECK-NEXT: NumberLiteral: '3.0' + + 1.0 && 2.0 && 3.0; + // CHECK: BinaryOperator: '&&' + // CHECK-NEXT: BinaryOperator: '&&' + // CHECK-NEXT: NumberLiteral: '1.0' + // CHECK-NEXT: NumberLiteral: '2.0' + // CHECK-NEXT: NumberLiteral: '3.0' + + 1.0 || 2.0 || 3.0; + // CHECK: BinaryOperator: '||' + // CHECK-NEXT: BinaryOperator: '||' + // CHECK-NEXT: NumberLiteral: '1.0' + // CHECK-NEXT: NumberLiteral: '2.0' + // CHECK-NEXT: NumberLiteral: '3.0' + + 1.0 || 2.0 && 3.0 && (4.0 || 5.0); + // CHECK: BinaryOperator: '||' + // CHECK-NEXT: NumberLiteral: '1.0' + // CHECK-NEXT: BinaryOperator: '&&' + // CHECK-NEXT: BinaryOperator: '&&' + // CHECK-NEXT: NumberLiteral: '2.0' + // CHECK-NEXT: NumberLiteral: '3.0' + // CHECK-NEXT: GroupingExpr: + // CHECK-NEXT: BinaryOperator: '||' + // CHECK-NEXT: NumberLiteral: '4.0' + // CHECK-NEXT: NumberLiteral: '5.0' +}