compilation/spf.lark

91 lines
1.5 KiB
Plaintext
Raw Normal View History

start: (instruction)*
2025-03-16 11:16:19 +01:00
instruction: keyword expression TERMINAL
| type declaration TERMINAL
| assignation TERMINAL
2025-03-17 17:53:00 +01:00
| controls
2025-03-16 11:16:19 +01:00
2025-03-17 17:53:00 +01:00
keyword: ADD_KW
| SHOW_KW
2025-03-16 11:16:19 +01:00
2025-03-17 23:19:02 +01:00
expression: expressionleft
| gen_op
expressionleft: literal
| list
| range
| VARIABLE
gen_op: expressionleft SAME_OP expression
| expressionleft DIFF_OP expression
2025-03-17 17:53:00 +01:00
type: BOOL_TYPE
| INT_TYPE
| STR_TYPE
| LIST_TYPE
declaration: VARIABLE (EQUAL_SIGN expression)?
assignation: VARIABLE EQUAL_SIGN expression
2025-03-17 23:19:02 +01:00
loop: "tant" "que" expression "faire" "{" (instruction)* "}"
2025-03-16 11:16:19 +01:00
2025-03-16 11:50:54 +01:00
literal: ENTIER
2025-03-17 23:19:02 +01:00
| booleen
2025-03-17 17:53:00 +01:00
| ESCAPED_STRING
2025-03-16 11:50:54 +01:00
list: "[" expression? ("," expression)* "]"
range: "[" ENTIER? ":" ENTIER? "]"
2025-03-16 11:16:19 +01:00
controls: test
| loop
2025-03-17 17:53:00 +01:00
test: "si" expression "alors" "{" instruction* "}"
| "si" expression "alors" "{" instruction* "}" "sinon" "{" instruction* "}"
operator: PLUS_SIGN
| MINUS_SIGN
| TIMES_SIGN
| DIVIDE_SIGN // TODO: not complete
2025-03-16 11:50:54 +01:00
2025-03-17 17:53:00 +01:00
TERMINAL: ";"
2025-03-16 11:50:54 +01:00
2025-03-17 17:53:00 +01:00
VAR_CHARS: /[a-zA-Zçâêîôûéàèìòùëïü_]/
VARIABLE: VAR_CHARS (VAR_CHARS | /[0-9]/)*
2025-03-16 11:16:19 +01:00
2025-03-17 17:53:00 +01:00
EQUAL_SIGN: "="
2025-03-16 11:16:19 +01:00
2025-03-17 17:53:00 +01:00
ENTIER: /[1-9][0-9]*/
2025-03-16 11:16:19 +01:00
2025-03-17 23:19:02 +01:00
booleen: TRUE_KW
2025-03-17 17:53:00 +01:00
| FALSE_KW
2025-03-16 11:16:19 +01:00
2025-03-17 17:53:00 +01:00
PLUS_SIGN: "+"
MINUS_SIGN: "-"
TIMES_SIGN: "*"
DIVIDE_SIGN: "/"
2025-03-17 17:53:00 +01:00
BOOL_TYPE: "booléen"
INT_TYPE: "entier"
STR_TYPE: "texte"
LIST_TYPE: "liste"
2025-03-16 11:16:19 +01:00
2025-03-17 23:19:02 +01:00
SAME_OP: "==" | "vaut"
DIFF_OP: "!=" | "ne" "vaut" "pas"
ADD_KW: "ajouter"
SHOW_KW: "afficher"
2025-03-16 11:50:54 +01:00
TRUE_KW: "vrai"
FALSE_KW: "faux"
2025-03-16 11:50:54 +01:00
2025-03-17 17:53:00 +01:00
%import common.ESCAPED_STRING
COMMENT: /#[^\n]*/
%ignore COMMENT
2025-03-16 11:50:54 +01:00
%import common.WS
%ignore WS