start: (instruction)* instruction: type declaration TERMINAL | assignation TERMINAL | controls | SHOW_KW expression ("," expression)* TERMINAL | ADD_KW expression "dans" VARIABLE TERMINAL expression: expressionleft // TODO: priorité des op certainement fausse | op expressionleft: literal | list | range | VARIABLE op: expressionleft SAME_OP expression | expressionleft DIFF_OP expression | expressionleft AND_OP expression | expressionleft OR_OP expression | NOT_OP expression | expressionleft LT_OP expression | expressionleft LE_OP expression | expressionleft GT_OP expression | expressionleft GE_OP expression | expressionleft operator expression | NEG_OP expression | expressionleft CONC_OP expression | expressionleft ("[" expression "]" | range) | SIZE_OP expression | "(" expression ")" type: BOOL_TYPE | INT_TYPE | STR_TYPE | LIST_TYPE declaration: VARIABLE (EQUAL_SIGN expression)? assignation: VARIABLE EQUAL_SIGN expression loop: "tant" "que" expression "faire" "{" (instruction)* "}" | "pour" "chaque" type VARIABLE "dans" expression "faire" "{" (instruction)* "}" literal: ENTIER | booleen | ESCAPED_STRING list: "[" expression? ("," expression)* "]" range: "[" expression? ":" expression? "]" controls: test | loop test: "si" expression "alors" "{" instruction* "}" | "si" expression "alors" "{" instruction* "}" "sinon" "{" instruction* "}" operator: PLUS_OP | MINUS_OP | TIMES_OP | DIVIDE_OP // TODO: not complete TERMINAL: ";" VAR_CHARS: /[a-zA-Zçâêîôûéàèìòùëïü_]/ VARIABLE: VAR_CHARS (VAR_CHARS | /[0-9]/)* EQUAL_SIGN: "=" ENTIER: /0|[1-9][0-9]*/ booleen: TRUE_KW | FALSE_KW BOOL_TYPE: "booléen" INT_TYPE: "entier" STR_TYPE: "texte" LIST_TYPE: "liste" SAME_OP: "==" | "vaut" DIFF_OP: "!=" | "ne" "vaut" "pas" AND_OP: "et" OR_OP: "ou" NOT_OP: "not" NEG_OP: "-" PLUS_OP: "+" MINUS_OP: "-" TIMES_OP: "*" DIVIDE_OP: "/" LT_OP: "<" LE_OP: "<=" GT_OP: ">" GE_OP: ">=" CONC_OP: "+" SIZE_OP: "taille" ADD_KW: "ajouter" SHOW_KW: "afficher" TRUE_KW: "vrai" FALSE_KW: "faux" %import common.ESCAPED_STRING COMMENT: /#[^\n]*/ %ignore COMMENT %import common.WS %ignore WS