编译器:改变含糊不清的语法

时间:2016-11-03 17:32:43

标签: context-free-grammar ambiguous-grammar

这个练习有点问题。

鉴于这个语法:

S -> aX | X
X -> aXb | b | eps

a)表明它与字符串

不明确

b)说出什么语言捕获语法

c)更改语法并构建后代解析器

我的解决方案:

a)我用字符串' ab '

显示模糊不清
- S -> aX -> ab
- S -> X -> aXb -> ab

b)语法捕获这种语言:

L = {a^n b^n: n >= 0} U {a^n b^m: n=m+1, n,m >= 0} U {a^n b^m: m=n+1, n,m >= 0} 

c)我的问题是改变语法来构建解析器。我尝试不同的语法,但它们也含糊不清。 例如:

 - G -> X$
   X -> aX' | b | eps
   X' -> XB | eps 

你能帮我找一个正确的练习语法或给我一个输入吗?

1 个答案:

答案 0 :(得分:-1)

正如你所知道的,语言

S -> X | a S b

可以被描述为“由相同数量的a s和b s包围的X的实例”。 X这里是递归的基础。

正如您所建立的那样,目标语言每个字母的数量相同,或者一个字母中的一个字母。所以我们可能会问,“X的简单定义可以产生这种语言吗?”