如何使这个上下文免费语法明确无误?

时间:2018-02-03 05:18:04

标签: algorithm context-free-grammar ambiguous formal-languages context-free-language

该语言是(0^i)(1^j) where 2i >= j形式的所有二进制字符串。换句话说,二进制字符串的集合最多只有1's的两倍,然后是0's,所有0's都是领先的。

我的尝试:

S -> 0S | T

T -> 0T1 | U

U -> 0U11 | epsilon

然而,这在string 0011上是不明确的。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

你几乎拥有它,只是一个小小的变化:

S -> 0S | T    
T -> 0U1 | U 
U -> 0U11 | epsilon

这可以确保只能以一种方式生成一定数量的1。规则S - >然后使用0S来产生仍然必要的0。