From 9c17bd6c81a616686e9a40c140a7024427a34ef3 Mon Sep 17 00:00:00 2001 From: tonitch Date: Tue, 18 Mar 2025 00:06:22 +0100 Subject: [PATCH] adding op (unordered) --- spf.lark | 67 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 18 deletions(-) diff --git a/spf.lark b/spf.lark index 0c94809..7ddb12e 100644 --- a/spf.lark +++ b/spf.lark @@ -1,15 +1,16 @@ start: (instruction)* -instruction: keyword expression TERMINAL - | type declaration TERMINAL +instruction: type declaration TERMINAL | assignation TERMINAL | controls + | SHOW_KW expression ("," expression)* TERMINAL + | ADD_KW expression "dans" VARIABLE TERMINAL -keyword: ADD_KW - | SHOW_KW - -expression: expressionleft +expression: expressionleft // TODO: priorité des op certainement fausse | gen_op + | bool_op + | int_op + | list_op expressionleft: literal | list @@ -19,8 +20,23 @@ expressionleft: literal gen_op: expressionleft SAME_OP expression | expressionleft DIFF_OP expression +bool_op: expressionleft AND_OP expression + | expressionleft OR_OP expression + | NOT_OP expression + +int_op: expressionleft LT_OP expression + | expressionleft LE_OP expression + | expressionleft GT_OP expression + | expressionleft GE_OP expression + | expressionleft operator expression + | NEG_OP expression + +list_op: expressionleft CONC_OP expression + | expressionleft ("[" expression "]" | range) + | SIZE_OP expression + type: BOOL_TYPE - | INT_TYPE + | INT_TYPE | STR_TYPE | LIST_TYPE @@ -29,6 +45,7 @@ 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 @@ -36,7 +53,7 @@ literal: ENTIER list: "[" expression? ("," expression)* "]" -range: "[" ENTIER? ":" ENTIER? "]" +range: "[" expression? ":" expression? "]" controls: test | loop @@ -45,10 +62,10 @@ test: "si" expression "alors" "{" instruction* "}" | "si" expression "alors" "{" instruction* "}" "sinon" "{" instruction* "}" -operator: PLUS_SIGN - | MINUS_SIGN - | TIMES_SIGN - | DIVIDE_SIGN // TODO: not complete +operator: PLUS_OP + | MINUS_OP + | TIMES_OP + | DIVIDE_OP // TODO: not complete TERMINAL: ";" @@ -57,16 +74,11 @@ VARIABLE: VAR_CHARS (VAR_CHARS | /[0-9]/)* EQUAL_SIGN: "=" -ENTIER: /[1-9][0-9]*/ +ENTIER: /0|[1-9][0-9]*/ booleen: TRUE_KW | FALSE_KW -PLUS_SIGN: "+" -MINUS_SIGN: "-" -TIMES_SIGN: "*" -DIVIDE_SIGN: "/" - BOOL_TYPE: "booléen" INT_TYPE: "entier" STR_TYPE: "texte" @@ -75,6 +87,25 @@ 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"