编译器:为所有 0 和 1 字符串集设计一种语法,使得每个 0 后紧跟至少一个 1

Compilers: design a grammar for all sets of strings of 0s and 1s such that every 0 is immediately followed by at least one 1

认为可能是s -> (0*1)*,但我对它的理解还不够确定。 本题出自编译龙书

你的语法定义不正确。例如,字符串 011 显然满足给定的 属性,但是,它无法被您的语法识别。此外,您的语法可以识别像 001 这样的字符串,它显然不满足给定的 属性,因为第一个 0 紧接着是 0 而不是 1.

正则表达式 011* 确保 0 后紧跟至少一个 1,因此接受具有所需 属性 的所有二进制字符串的语言可以是由正则表达式 1*(011*)*.

表示

等效的CFG如下:

S → AB
A → ε | 1A
B → ε | CB
C → 01A

上述CFG定义中,A对应1*B对应(011*)*C对应011* .