Standard pour les grammaires formelles (les syntaxes)
| Auteur | Message |
|---|---|
|
Pour les descriptions des syntaxes, la notation BNF est connue, car académique. On a la reconnaît à son usage du “::=”. Bien que répandue et académique, cette notation n’est pas standardisée, pas plus que EBNF qui l’a suivit.
Il semble que ABNF est le seul standard en la matière. Des gens la reconnaîtront, parce qu’elle est utilisée dans les RFC et est justement définie par une RFC. J’indique deux pages la décrivant informellement, en plus du standard. Personnellement, je ne suis pas trop d’accord avec l’affirmation du premier article, que l’ABNF n’est pas lisible. Et si c’est une question de présentation, rien n’empêche de la représenter avec d’autres caractères, comme “|” au lieu de “/”, si la substitution est bien précisée. Ou aussi, dériver une représentation sous forme de graphes, comme le faisaient souvent les livres sur le Pascal. |
|
|
Assez en rapport, voir aussi : Standard pour les arbres syntaxiques ou sémantiques.
|
|
|
Les PEG : Parsing Expression Grammars
Personnellement pas trop favorable à ce formalisme, il est assez intéressant et important pour être mentionné :
Ce que je reproche à ce type de grammaire, est de masquer les ambiguïté, de les faire disparaître gratuitement pour ensuite dire qu’elles n’existent plus. Bryan Ford a écrit : For decades we have been using Chomsky’s generative system of grammars, particularly context-free grammars (CFGs) and regular expressions (REs), to express the syntax of programming languages and protocols. The power of generative grammars to express ambiguity is crucial to their original purpose of modelling natural languages, but this very power makes it unnecessarily difficult both to express and to parse machine-oriented languages using CFGs. Oui, mais les lecteur‑rices humain‑es ne sont pas des automates déterministes. En pratique, la grammaire restera ambiguë. Deux exemples sont le IF THEN ELSE IF … du Pascal, et les cases imbriqués du SML. Même en considérant qu’une interprétation est prioritaire sur l’autre, cette priorité ne se voit pas à la lecture et l’ambiguïté persiste donc. Un des adages du langage Ada est (ou était, comme je ne sais pas ce qu’il devient depuis), “ Programming as a Human activity ”. Même un langage formel, sera lu comme en bonne partie comme un langage naturel. Ce n’est pas pour rien si les langage anciens des années 1960, du genre Algol, SQL et d’autres, essayaient de s’en approcher, comme ça s’est vu encore par la suite jusque avec Pascal et Ada. Ceci dit, cette approche méritait d’être mentionnée dans ce sujet. |
