Bonjour,
Je suis en train de créer un nouveau langage (!)
J'ai fait la grammaire (que j'ai ensuite programmé sous javacc), ca semble marcher. Mais comme je ne suis pas du tout un expert du domaine (je me suis formé via des tutoriaux, le dragon compiler et quelques souvenir de DEA), j'aimerais des avis...
Voyez-vous des choses mal faites, ou à améliorer dans ma grammaire ? Des truc qu'on faisait comme ca il y a 20 ans, mais plus du tout maintenant ?
:-)
1 Définition des token
1.1 Expressions régulières
1 2 3 4 5 6 7
| letterMaj [A-Z]
letterMin [a-z]
letter letterMaj | letterMin
digit [0_9]
digit_not_nul [1_9]
other é | è | ç | à | ê | ù // on complètera
ascii letter |digit | other |
1.2 Types
1 2 3 4
| LOGICAL TRUE | FALSE
INTEGER ("-"|"+")? (digitNotNul digit* | "0")
NUMERIC INTEGER "." digit+ ("E" INTEGER)?
CHARACTER QUOTE1 ascii* QUOTE1 | QUOTE2 ascii* QUOTE2 |
1.3 Les mots clefs du langage
1 2 3 4
| SET set
GET get
TYPE type
IS_EQUAL isEqual |
1.4 Operateurs
1 2 3 4
| PLUS +
MULT *
AND AND
OR OR |
1.5 Identifiants
IDENTIFIANT letter (letter|digit)*
1.6 Constantes
1.7 Ponctuation
1 2 3 4 5 6
| COMMA ,
OPEN_PAR (
CLOSE_PAR )
DOT .
QUOTE1 '
QUOTE2 " |
2 Règles syntaxiques
1 2 3 4 5 6 7
| prog -> stmt*
stmt -> <IDENTIFIANT> <DOT> method <OPEN_PAR> args? <CLOSE_PAR>
method -> <SET> | <GET> | <TYPE> | <IS_EQUAL>
args -> expression (<COMMA> expression)*
expression -> expression2 (operateur expression2)*
expression2 -> <OPEN_PAR> expression <CLOSE_PAR> | value
value -> <LOGICAL> | <INTEGER> | <NUMERIC> | <CHARACTER> | <IDENTIFIANT> |
Partager