我无法全神贯注地将这种语法(?表示零或一次出现,+表示至少一次出现)解析为可以使用LL(1)解析的等效项:
S -> X? Y+
X -> aU
Y -> aV
问题是:当我看到一个“ a”时,它是X还是Y产生的?有什么想法吗?
编辑:U和V可以以相同的符号开头...
答案 0 :(得分:1)
您需要对规则进行分解,以创建LL(1)语法。只要U
和V
不能以相同的符号开头(并且不能为空),则可以以等效的正则表达式a(Ua)?V(aV)*
开头。
如果U
和V
可以以相同的符号开头,则还需要排除公共前缀。