mirror of
https://github.com/LucasVbr/croissant.git
synced 2026-05-13 17:12:10 +00:00
feat: Add boolean literal and comparable binary operators
This commit is contained in:
+11
-1
@@ -34,9 +34,19 @@ rule token = parse
|
|||||||
| '-' { MINUS }
|
| '-' { MINUS }
|
||||||
| '*' { TIMES }
|
| '*' { TIMES }
|
||||||
| '/' { DIV }
|
| '/' { DIV }
|
||||||
|
| "==" { EQUAL_EQUAL }
|
||||||
|
| "!=" { NOT_EQUAL }
|
||||||
|
| "<" { LESS_THAN }
|
||||||
|
| "<=" { LESS_THAN_EQUAL }
|
||||||
|
| ">" { GREATER_THAN }
|
||||||
|
| ">=" { GREATER_THAN_EQUAL }
|
||||||
|
| "&&" { AMPERSAND_AMPERSAND }
|
||||||
|
| "||" { BAR_BAR }
|
||||||
|
| "!" { EXCLAMATION }
|
||||||
|
|
||||||
(* Keywords *)
|
(* Keywords *)
|
||||||
(* ... *)
|
| "vrai" { BOOLEAN(true) }
|
||||||
|
| "faux" { BOOLEAN(false) }
|
||||||
|
|
||||||
(* Literals *)
|
(* Literals *)
|
||||||
| interger as i { INT (int_of_string i) }
|
| interger as i { INT (int_of_string i) }
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ open Syntax
|
|||||||
%token <int> INT
|
%token <int> INT
|
||||||
%token <float> FLOAT
|
%token <float> FLOAT
|
||||||
%token <char> CHARACTER
|
%token <char> CHARACTER
|
||||||
|
%token <bool> BOOLEAN
|
||||||
%token <string> STRING
|
%token <string> STRING
|
||||||
%token <string> IDENTIFIER
|
%token <string> IDENTIFIER
|
||||||
%token NULL
|
%token NULL
|
||||||
@@ -13,6 +14,15 @@ open Syntax
|
|||||||
%token MINUS "-"
|
%token MINUS "-"
|
||||||
%token TIMES "*"
|
%token TIMES "*"
|
||||||
%token DIV "/"
|
%token DIV "/"
|
||||||
|
%token EQUAL_EQUAL "=="
|
||||||
|
%token NOT_EQUAL "!="
|
||||||
|
%token LESS_THAN "<"
|
||||||
|
%token LESS_THAN_EQUAL "<="
|
||||||
|
%token GREATER_THAN ">"
|
||||||
|
%token GREATER_THAN_EQUAL ">="
|
||||||
|
%token AMPERSAND_AMPERSAND "&&"
|
||||||
|
%token BAR_BAR "||"
|
||||||
|
%token EXCLAMATION "!"
|
||||||
|
|
||||||
%token SEMICOLON ";"
|
%token SEMICOLON ";"
|
||||||
|
|
||||||
@@ -50,15 +60,25 @@ expression:
|
|||||||
literal:
|
literal:
|
||||||
| INT { Literals.Integer($1) }
|
| INT { Literals.Integer($1) }
|
||||||
| FLOAT { Literals.Float($1) }
|
| FLOAT { Literals.Float($1) }
|
||||||
|
| BOOLEAN { Literals.Boolean($1) }
|
||||||
| CHARACTER { Literals.Character($1) }
|
| CHARACTER { Literals.Character($1) }
|
||||||
| STRING { Literals.String($1) }
|
| STRING { Literals.String($1) }
|
||||||
| NULL { Literals.Null }
|
| NULL { Literals.Null }
|
||||||
|
|
||||||
unary_expression:
|
unary_expression:
|
||||||
| "-" expression %prec UMINUS { Expressions.UnaryExpression(UnaryOperators.ArithmeticNegation, $2) }
|
| "-" expression %prec UMINUS { Expressions.UnaryExpression(UnaryOperators.ArithmeticNegation, $2) }
|
||||||
|
| "!" expression { Expressions.UnaryExpression(UnaryOperators.LogicalNegation, $2) }
|
||||||
|
|
||||||
binary_expression:
|
binary_expression:
|
||||||
| expression "+" expression { Expressions.BinaryExpression (BinaryOperators.Add, $1, $3) }
|
| expression "+" expression { Expressions.BinaryExpression (BinaryOperators.Add, $1, $3) }
|
||||||
| expression "-" expression { Expressions.BinaryExpression (BinaryOperators.Subtract, $1, $3) }
|
| expression "-" expression { Expressions.BinaryExpression (BinaryOperators.Subtract, $1, $3) }
|
||||||
| expression "*" expression { Expressions.BinaryExpression (BinaryOperators.Multiply, $1, $3) }
|
| expression "*" expression { Expressions.BinaryExpression (BinaryOperators.Multiply, $1, $3) }
|
||||||
| expression "/" expression { Expressions.BinaryExpression (BinaryOperators.Divide, $1, $3) }
|
| expression "/" expression { Expressions.BinaryExpression (BinaryOperators.Divide, $1, $3) }
|
||||||
|
| expression "==" expression { Expressions.BinaryExpression (BinaryOperators.Equals, $1, $3) }
|
||||||
|
| expression "!=" expression { Expressions.BinaryExpression (BinaryOperators.NotEquals, $1, $3) }
|
||||||
|
| expression "<" expression { Expressions.BinaryExpression (BinaryOperators.LessThan, $1, $3) }
|
||||||
|
| expression "<=" expression { Expressions.BinaryExpression (BinaryOperators.LessThanEquals, $1, $3) }
|
||||||
|
| expression ">" expression { Expressions.BinaryExpression (BinaryOperators.GreaterThan, $1, $3) }
|
||||||
|
| expression ">=" expression { Expressions.BinaryExpression (BinaryOperators.GreaterThanEquals, $1, $3) }
|
||||||
|
| expression "&&" expression { Expressions.BinaryExpression (BinaryOperators.And, $1, $3) }
|
||||||
|
| expression "||" expression { Expressions.BinaryExpression (BinaryOperators.Or, $1, $3) }
|
||||||
@@ -1,7 +1,27 @@
|
|||||||
type binary_operators = Add | Subtract | Multiply | Divide
|
type binary_operators =
|
||||||
|
| Add
|
||||||
|
| Subtract
|
||||||
|
| Multiply
|
||||||
|
| Divide
|
||||||
|
| Equals
|
||||||
|
| NotEquals
|
||||||
|
| LessThan
|
||||||
|
| LessThanEquals
|
||||||
|
| GreaterThan
|
||||||
|
| GreaterThanEquals
|
||||||
|
| And
|
||||||
|
| Or
|
||||||
|
|
||||||
let pp_binary_operators = function
|
let pp_binary_operators = function
|
||||||
| Add -> "Add"
|
| Add -> "Add"
|
||||||
| Subtract -> "Subtract"
|
| Subtract -> "Subtract"
|
||||||
| Multiply -> "Multiply"
|
| Multiply -> "Multiply"
|
||||||
| Divide -> "Divide"
|
| Divide -> "Divide"
|
||||||
|
| Equals -> "Equals"
|
||||||
|
| NotEquals -> "NotEquals"
|
||||||
|
| LessThan -> "LessThan"
|
||||||
|
| LessThanEquals -> "LessThanEquals"
|
||||||
|
| GreaterThan -> "GreaterThan"
|
||||||
|
| GreaterThanEquals -> "GreaterThanEquals"
|
||||||
|
| And -> "And"
|
||||||
|
| Or -> "Or"
|
||||||
@@ -1 +1 @@
|
|||||||
'a';
|
!vrai;
|
||||||
@@ -8,6 +8,16 @@ let test_pp_binary_operators () =
|
|||||||
("Should return \"Subtract\"", "Subtract", Subtract);
|
("Should return \"Subtract\"", "Subtract", Subtract);
|
||||||
("Should return \"Multiply\"", "Multiply", Multiply);
|
("Should return \"Multiply\"", "Multiply", Multiply);
|
||||||
("Should return \"Divide\"", "Divide", Divide);
|
("Should return \"Divide\"", "Divide", Divide);
|
||||||
|
("Should return \"Equals\"", "Equals", Equals);
|
||||||
|
("Should return \"NotEquals\"", "NotEquals", NotEquals);
|
||||||
|
("Should return \"LessThan\"", "LessThan", LessThan);
|
||||||
|
("Should return \"LessThanEquals\"", "LessThanEquals", LessThanEquals);
|
||||||
|
("Should return \"GreaterThan\"", "GreaterThan", GreaterThan);
|
||||||
|
( "Should return \"GreaterThanEquals\"",
|
||||||
|
"GreaterThanEquals",
|
||||||
|
GreaterThanEquals );
|
||||||
|
("Should return \"And\"", "And", And);
|
||||||
|
("Should return \"Or\"", "Or", Or);
|
||||||
]
|
]
|
||||||
in
|
in
|
||||||
List.iter
|
List.iter
|
||||||
|
|||||||
Reference in New Issue
Block a user