Adding most operators
This commit is contained in:
43
spf.lark
43
spf.lark
@@ -3,7 +3,7 @@ start: (instruction)*
|
||||
instruction: declaration ";"
|
||||
| assignation ";"
|
||||
| SHOW_KW expression ("," expression)* ";" -> afficher
|
||||
| ADD_KW expression "dans" VARIABLE ";"
|
||||
| ADD_KW expression "dans" VARIABLE ";" -> append
|
||||
| controls
|
||||
|
||||
expression: expressionleft // TODO: priorité des operator certainement fausse
|
||||
@@ -16,26 +16,25 @@ expressionleft: literal
|
||||
| "(" expression ")"
|
||||
|
||||
//any -> bool
|
||||
operator: expressionleft SAME_OP expression
|
||||
| expressionleft DIFF_OP expression
|
||||
operator: expressionleft SAME_OP expression -> equal
|
||||
| expressionleft DIFF_OP expression -> unequal
|
||||
//bool -> bool
|
||||
| expressionleft AND_OP expression
|
||||
| expressionleft OR_OP expression
|
||||
| NOT_OP expression
|
||||
| expressionleft AND_OP expression -> and_op
|
||||
| expressionleft OR_OP expression -> or_op
|
||||
| NOT_OP expression -> not_op
|
||||
//int -> bool
|
||||
| expressionleft LT_OP expression
|
||||
| expressionleft LE_OP expression
|
||||
| expressionleft GT_OP expression
|
||||
| expressionleft GE_OP expression
|
||||
| expressionleft LT_OP expression -> lt
|
||||
| expressionleft LE_OP expression -> le
|
||||
| expressionleft GT_OP expression -> gt
|
||||
| expressionleft GE_OP expression -> ge
|
||||
//int -> int
|
||||
| expressionleft PLUS_OP expression
|
||||
| expressionleft MINUS_OP expression
|
||||
| expressionleft TIMES_OP expression
|
||||
| expressionleft DIVIDE_OP expression
|
||||
| NEG_OP expression
|
||||
| expressionleft PLUS_OP expression -> plus
|
||||
| expressionleft MINUS_OP expression -> minus
|
||||
| expressionleft TIMES_OP expression -> time
|
||||
| expressionleft DIVIDE_OP expression -> divide
|
||||
| NEG_OP expression -> neg
|
||||
// string/list -> string/list
|
||||
| expressionleft CONC_OP expression
|
||||
| SIZE_OP expression
|
||||
| SIZE_OP expression -> sizeof
|
||||
|
||||
?type: BOOL_TYPE
|
||||
| INT_TYPE
|
||||
@@ -46,8 +45,8 @@ declaration: type VARIABLE (EQUAL_SIGN expression)?
|
||||
|
||||
assignation: VARIABLE EQUAL_SIGN expression
|
||||
|
||||
loop: /tant que/ expression "faire" "{" (instruction)* "}"
|
||||
| /pour chaque/ type VARIABLE "dans" expression "faire" "{" (instruction)* "}"
|
||||
loop: "tant" "que" expression "faire" "{" (instruction)* "}" -> while_loop
|
||||
| "pour" "chaque" type VARIABLE "dans" expression "faire" "{" (instruction)* "}" -> for_loop
|
||||
|
||||
?literal: ENTIER -> entier
|
||||
| booleen
|
||||
@@ -62,6 +61,9 @@ controls: test
|
||||
|
||||
test: "si" expression "alors" "{" instruction* "}" ("sinon" "{" instruction* "}")?
|
||||
|
||||
?booleen: TRUE_KW -> true
|
||||
| FALSE_KW -> false
|
||||
|
||||
TERMINAL: ";"
|
||||
|
||||
VAR_CHARS: /[a-zA-Zçâêîôûéàèìòùëïü_]/
|
||||
@@ -71,9 +73,6 @@ EQUAL_SIGN: "="
|
||||
|
||||
ENTIER: /0|[1-9][0-9]*/
|
||||
|
||||
?booleen: TRUE_KW -> true
|
||||
| FALSE_KW -> false
|
||||
|
||||
BOOL_TYPE: "booléen"
|
||||
INT_TYPE: "entier"
|
||||
STR_TYPE: "texte"
|
||||
|
||||
Reference in New Issue
Block a user