[parser] adding support for expressions

This commit is contained in:
dsac
2022-12-07 21:56:38 +01:00
parent e9e5cdcf4d
commit 839f7b77af
7 changed files with 221 additions and 16 deletions

View File

@@ -15,6 +15,24 @@
("var", VAR);
("int", INT);
("bool", BOOL);
("<=", BO_le);
(">=", BO_ge);
("not", MO_not);
("mod", BO_mod);
("&&", BO_and);
("and", BO_and);
("||", BO_or);
("or", BO_or);
("<>", BO_neq);
("if", IF);
("then", THEN);
("else", ELSE);
("", BO_le);
("", BO_ge );
("¬", MO_not);
("pre", PRE);
("true", CONST_BOOL(true));
("false", CONST_BOOL(false));
];
fun s ->
try Hashtbl.find h s with Not_found -> IDENT s
@@ -27,12 +45,21 @@ let ident = alpha (alpha | digit | '_')*
rule token = parse
['\n' ' ' '\t'] { token lexbuf } (* skip blanks and newlines *)
| ident { id_or_keywork (lexeme lexbuf) }
| digit+ { CONST_INT(int_of_string (lexeme lexbuf)) }
| ',' { COMMA }
| '=' { EQUAL }
| '(' { LPAREN }
| ')' { RPAREN }
| ';' { SEMICOL }
| ':' { COLON }
| '<' { BO_lt }
| '>' { BO_gt }
| '+' { PLUS }
| '-' { MINUS }
| '*' { BO_mul }
| '/' { BO_div }
| '%' { BO_mod }
| "->" { ARROW }
| eof { EOF }
| _ { raise (Lexing_error (Format.sprintf "Erruer à la vue de %s" (lexeme lexbuf)))}