2010-11-19 6 views
0

Voici une explication simple du problème. Gardez à l'esprit ce n'est pas le vrai problèmebison: Peut traiter avec Conflict, quelle route devrais-je prendre?

Disons dans ma langue les fonctions ne peuvent pas renvoyer des pointeurs et les variables membres ne peuvent pas être des références. Bison se plaint (avec des problèmes de réduction/réduction comme 40) de ne pas déduire si le type dans ce type est une fonction ou une variable membre. Je le sais mais c'est ridicule d'avoir plus de 40 conflits à partir de cette ligne.

Class Name { ... 
Type& func() { 
Type* Var=0 
Type What 

Comment est-ce que je devrais m'occuper de ceci? devrais-je utiliser% glr-parser et mettre expect/expect-rr à une valeur? ou devrais-je utiliser un type qui a tout et filtre ce qui est légal ou pas dans le code? Il semble que mes choix aient plus de conflits/ambigüité VS écrire plus de code pour y faire face. Je ne suis pas sûr de ce qui est pire alors je me demande si l'un d'entre vous a dû faire face à cela.

Répondre

2

Vous ne devriez pas essayer d'exprimer des contraintes de type dans la grammaire. Cela a été prouvé de façon concluante par le fiasco d'Algol-68 documenté par Wirth et d'autres.

+0

Un lien à cela? ok donc je devrais écrire une syntaxe plus générale et utiliser du code pour dire si sa syntaxe est invalide ou non –

+1

C'est une débâcle bien connue. Il est largement documenté dans les documents de conférence ACM History of Programming Languages. Vous devez utiliser la grammaire uniquement pour exprimer la syntaxe, et effectuer une vérification sémantique en tant que phase distincte pendant le post-traitement de l'arbre de syntaxe. – EJP