compilation/spf.lark

60 lines
933 B
Plaintext
Raw Normal View History

2025-03-16 11:16:19 +01:00
start: (instruction)* TERMINAL
instruction: KEYWORD TERMINAL
| declaration TERMINAL
2025-03-16 11:50:54 +01:00
declaration: TYPE VARIABLE
| TYPE VARIABLE "=" expression
2025-03-16 11:16:19 +01:00
expression: literal
| list
| range
| expression operator expression
| operator expression
2025-03-16 11:50:54 +01:00
literal: ENTIER
| BOOLEEN
| texte
texte: "\"" STRING "\""
list: "[" expression? ("," expression)* "]"
range: "[" ENTIER? ":" ENTIER? "]"
2025-03-16 11:16:19 +01:00
controls: test
| loop
2025-03-16 11:50:54 +01:00
operator: PLUS
| MINUS
| TIMES
| DIVIDE // TODO: not complete
PLUS: "+"
MINUS: "-"
TIMES: "*"
DIVIDE: "/"
2025-03-16 11:16:19 +01:00
test: "si" expression "alors" "{" instruction* "}"
2025-03-16 11:34:53 +01:00
loop: "si" expression "alors" "{" (instruction)* "}"
2025-03-16 11:16:19 +01:00
COMMENT: "#" /[^\n]/
%ignore COMMENT
TERMINAL: ";"
2025-03-16 11:50:54 +01:00
VARIABLE: /([a-z]|[A-Z]|_)+([a-z]|[A-Z]|[0-9]|_)+/ // TODO: ajouter accents
2025-03-16 11:16:19 +01:00
TYPE: "booléen" | "entier" | "texte" | "liste"
2025-03-16 11:50:54 +01:00
KEYWORD: "ajouter" | "afficher"
ENTIER: /[1-9][0-9]*/
BOOLEEN: "vrai" | "faux"
STRING: /\w+/