Parsing LL(1)解析表中有多个条目?
鉴于这种语法: → S1 S2 S1→ a |ε S2→ ab |ε 因此,我们有 第一(S1)={a,ε} 跟随(S1)={a} 这是否意味着在解析表中,我将在S1的行和a的列中有多个定义?是的,这是正确的。(但是,请注意,FOLLOW集合是错误的;它还包含输入结束标记$)。这里的问题是,如果解析器看到一个Parsing LL(1)解析表中有多个条目?,parsing,compiler-construction,context-free-grammar,ll,Parsing,Compiler Construction,Context Free Grammar,Ll,鉴于这种语法: → S1 S2 S1→ a |ε S2→ ab |ε 因此,我们有 第一(S1)={a,ε} 跟随(S1)={a} 这是否意味着在解析表中,我将在S1的行和a的列中有多个定义?是的,这是正确的。(但是,请注意,FOLLOW集合是错误的;它还包含输入结束标记$)。这里的问题是,如果解析器看到一个a,它无法判断这是否是因为它想要使用派生 → S1S2→ S2 还是派生 → S1S2→ S2→ ab 为了解决这个问题,您可以注意到语法只生成字符串{a,ab,aab}。因此,您可以为直接
a
,它无法判断这是否是因为它想要使用派生
→ S1S2→ S2
还是派生
→ S1S2→ S2→ ab
为了解决这个问题,您可以注意到语法只生成字符串{a,ab,aab}。因此,您可以为直接生成这三个字符串的语言语法构建LL(1):
→ 嗯
Y→ ε| aZ
Z→ ε| b
希望这有帮助 是的,没错。(但是,请注意,FOLLOW集合是错误的;它还包含输入结束标记$)。这里的问题是,如果解析器看到一个a
,它无法判断这是否是因为它想要使用派生
→ S1S2→ S2
还是派生
→ S1S2→ S2→ ab
为了解决这个问题,您可以注意到语法只生成字符串{a,ab,aab}。因此,您可以为直接生成这三个字符串的语言语法构建LL(1):
→ 嗯
Y→ ε| aZ
Z→ ε| b
希望这有帮助 但是为什么在S1后面是$??因为S2含有ε?@MarounSassine-是的,这是正确的。因为S2的第一个集合中有ε,所以S1的FOLLOW集合包含S2的FOLLOW集合中的所有内容。由于S2位于开始生产的末尾,所以它的follow集合包含$。因此,S1的FOLLOW集合包含$。这就解释了吗?@templatetypedef抱歉打断一下,事实上我对编译器设计很感兴趣,发现你的幻灯片非常直观,但有时我发现它们很肤浅,你在重复幻灯片的地方,我想你一定是在课堂上解释了什么,我怎样才能从你的笔记中获得更多的资源/帮助呢?但是为什么S1后面有$??因为S2含有ε?@MarounSassine-是的,这是正确的。因为S2的第一个集合中有ε,所以S1的FOLLOW集合包含S2的FOLLOW集合中的所有内容。由于S2位于开始生产的末尾,所以它的follow集合包含$。因此,S1的FOLLOW集合包含$。这说明了什么吗?@templatetypedef抱歉打断一下,事实上我对编译器设计很感兴趣,发现你们的幻灯片我觉得很直观,但有时我发现它们很肤浅,你们在课堂上重复幻灯片的地方我想你们一定是在解释什么,我怎样才能从你们的笔记中获得更多的资源/帮助?