-1

我有以下問題。這個語法是不明確的:使語法明確嗎?

stmt - > if expr then stmt stmt'| a

stmt' - > else stmt | EPSILON

EXPR - >乙

我試圖修改它,我的結果是:

語句 - >如果expr然後stmt是」 | a

stmt'' - > stmt |語句」

語句」 - > b,否則語句

EXPR - >乙

但這並不產生相同的語言。

有人可以幫我修改含糊不清的語法,使其明確無誤且接受相同的語言嗎?

+0

您還沒有在第二個語法中定義B. –

回答

2

使用給定的語法,字符串if b then if b then a else a有兩個最左派生如下。

推導1:

if expr then stmt stmt' 
if b then stmt stmt' 
if b then if expr then stmt stmt' stmt' 
if b then if b then stmt stmt' stmt' 
if b then if b then a stmt' stmt' 
if b then if b then a stmt' 
if b then if b then a else stmt 
if b then if b then a else a 

推導2:

if expr then stmt stmt' 
if b then stmt stmt' 
if b then if expr then stmt stmt' stmt' 
if b then if b then stmt stmt' stmt' 
if b then if b then a stmt' stmt' 
if b then if b then a else stmt stmt' 
if b then if b then a else a stmt' 
if b then if b then a else a 

的語法分析樹保持爲相同大部分。但是在導出if b then if b then a stmt' stmt'之後,節點的順序發生變化,從而影響樹的結構。因此,給定的語法是不明確的。

+0

雖然upvoted,但是,OP要求消除語法的歧義。我有一段艱難的時期,甚至證明了模棱兩可。感謝精彩的努力。 –