J'ai la grammaire suivante, qui est un petit sous-ensemble de "The Complete Syntax of Lua":Cette grammaire (pour un petit sous-ensemble de Lua) est-elle ambiguë?
chunk -> | chunk stat.
stat -> var `=´ exp.
var -> Name | exp `[´ exp `]´.
exp -> var | exp `(´ exp `)´ | `(´ exp `)´.
Selon a context-free grammar tool, cette grammaire n'est pas LR(1)
et non LALR(1)
, SLR(1)
, LR(0)
ou LL(1)
(donc?).
Cette grammaire est-elle ambiguë? Si oui, pourriez-vous s'il vous plaît donner un exemple d'une phrase ambiguë? Si non, y at-il une bonne raison pour laquelle ce n'est pas LR(1)
?
Edit: Une grammaire légèrement simplifiée qui présente la même question:
stat -> exp | exp var.
var -> Name | exp `[´ exp `]´.
exp -> var | exp `(´ exp `)´ | `(´ exp `)´.
Edit 2: Merci à Michal Bohuslávek pour un exemple d'une phrase qui est ambiguë par rapport à la deuxième grammaire. Malheureusement, la phrase ne conduit pas directement à une ambiguïté avec la première grammaire.
Cependant, si la première règle de la deuxième grammaire ont été changés en stat -> exp var.
, une phrase ambiguë serait conduire à une ambiguïté avec la première grammaire. L'idée de Michal peut être étendue pour générer une telle phrase: exp '(' exp ')' '(' exp ')' '[' exp ']'
.