La question que je souhaite poser est succintly donné dans le titre. Permettez-moi de donner un exemple de la grammaire en question:
identifier_list
: identifier
| identifier_list identifier;
lambda_arguments
: '(' identifier_list ')'
| identifier;
lambda
: lambda_arguments '=>' expression
Ensuite, nous ajoutons dans la normal C une expression de grammaire en particulier,
primary_expression
: '(' expression ')'
| identifier
| lambda;
La vraie question est, est-ce la grammaire LALR(1) analysée, c'est à dire, pouvant être analysé par l'analyseur automatique des générateurs? Ou faut-il un roulé à la main ou GLR de l'analyseur? Notez que je souhaite savoir plus précisément à propos de ce paragraphe, pas à le contexte-les mots-clés sensibles des trucs ou tout autre article.
Ce que je pense maintenant, c'est que si l'analyseur voit '(' identifier ')'
, ce qui est valable analyse, de sorte que si l'analyseur voit identifier
, regarde vers l'avenir en ')'
, il ne sera pas en mesure de décider laquelle arbre d'analyse pour aller vers le bas. Ce pourrait n'être qu'une maj/réduire les conflits, cependant, que je pouvais éliminer par l'attribution arbitraire de priorité (probablement favouriing '(' identifier ')'
).
Edit: en Fait, j'envisage de voler à l'aide de ce paragraphe de la grammaire pour une fonctionnalité similaire dans une nouvelle langue. J'ai déjà anonyme des fonctions similaires à JavaScript en forme grammaticale, mais mes cobayes grince commentaires se plaint qu'ils sont trop verbeux pour de nombreuses utilisations, et a souligné les expressions lambda C# comme une solution idéale. J'ai été préoccupé par une ambiguïté potentielle résultant de cette solution. Donc, vraiment, j'étais seulement intéressé dans ce paragraphe. Les autres trucs comme les génériques et les castes sont des non-questions pour moi.
Les éditions précédentes de ma grammaire sont mécaniquement analysée et je ne veux pas perdre cette propriété, et mon expérience précédente avec une mécanique générateur me dit qu'il est préférable de vérifier d'ici plutôt que d'essayer moi-même. Pour ma roulés à la main analyseur bien sûr, je pourrais tout simplement spécial de cas '(' identifier
anticiper un peu plus loin que la normale.