2

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 ']'.

Répondre

1

Par exemple cette séquence est ambiguë OMI:

exp '(' exp ')' '[' exp ']' 

Il est soit:

exp '[' exp ']' 
/ \ 
exp '(' exp ')' 

Ou:

exp  var 
     / \ 
     exp '[' exp ']' 
     | 
    '(' exp ')'