Si je fais une grammaire pour un langage de type c qui a une suite d'énoncés, quelle est la manière la plus courante de définir la grammaire?Grammaire BNF pour la séquence d'instructions
Ma pensée est de faire quelque chose comme ceci:
<program> ::= <statement>
<statement> ::= <statement-head><statement-tail>
<statement-head> ::= <if-statement> | <var-declaration> | <assignment> | <whatever>
<statement-tail> ::= ; | ;<statement>
mais qui se sent un peu maladroit pour moi. J'ai aussi envisagé de faire
<program> ::= <statement>*
ou
<statement> ::= <statement-head> ; | <sequence>
<sequence> ::= <statement> <statement>
productions de type.
Existe-t-il une manière standard ou acceptée de le faire. Je veux que mon AST soit aussi propre que possible.
J'aime ça. Le seul problème que j'ai, c'est que je ne suis pas sûr que la plupart des générateurs d'analyseurs (j'utilise TinyPG) supportent la production/* empty * /. J'avais l'impression que ce n'était pas si casher. – captncraig
Peu importe. Après avoir regardé la grammaire C Aiden posté, il peut être: :: = | –
captncraig
Je l'utilise tout le temps dans ma grammaire de Bison :-) En fait, je l'ai pris du livre O'Reilly * lex et yacc *, où les auteurs utilisent systématiquement/* empty */pour souligner que la règle vide est vraiment là pour quelque chose. Si votre générateur d'analyseur ne supporte pas ce genre de commentaire, vous pouvez bien sûr le laisser de côté. –