Parsing LL-1解析器:下面的集合真的有必要吗?
据我所知,如果输入流中存在错误,那么FOLLOW Set会在第一个可能的时刻告诉我。是这样吗 否则我想知道你到底需要它做什么。考虑到解析器在栈的顶部有一个非终结符(在我们的类中,我们使用一个堆栈作为LL解析器的抽象) i、 e 由于X位于堆栈的顶部,因此下一步将替换X(假设它是非端子)。因此,解析器向解析表请求使用x的派生表达式。Parsing LL-1解析器:下面的集合真的有必要吗?,parsing,compiler-construction,grammar,context-free-grammar,ll,Parsing,Compiler Construction,Grammar,Context Free Grammar,Ll,据我所知,如果输入流中存在错误,那么FOLLOW Set会在第一个可能的时刻告诉我。是这样吗 否则我想知道你到底需要它做什么。考虑到解析器在栈的顶部有一个非终结符(在我们的类中,我们使用一个堆栈作为LL解析器的抽象) i、 e 由于X位于堆栈的顶部,因此下一步将替换X(假设它是非端子)。因此,解析器向解析表请求使用x的派生表达式。 + b 其中+和b都是终端 假设X的第一个集合中有”,即空字符串。而且在他的第一套中没有+ 据我所知,在这种情况下,解析器可以简单地检查第一组X中是否没有+,然后使
+ b
其中+
和b
都是终端
假设X的第一个集合中有”
,即空字符串。而且在他的第一套中没有+
据我所知,在这种情况下,解析器可以简单地检查第一组X中是否没有+
,然后使用派生,使X分解为“
即空字符串,因为这是解析器能够继续解析输入而不抛出错误的唯一方法。如果输入流无效,解析器将在稍后的某个时刻识别它。我知道FOLLOW集合可以帮助您立即确定解析是否可以在没有错误的情况下继续
我的问题是——这真的是FOLLOW set扮演的唯一角色吗
我希望我的问题属于这里——如果不是,我很抱歉。如果有不清楚的地方,请随时要求澄清
提前谢谢你你说得对。解析器最终可以继续解析,并最终以另一种方式找到冲突。 除此之外,FOLLOW集合可以非常方便地对语法进行推理。不是由解析器,而是由构造语法的人。例如,如果您发现存在任何FIRST/FIRST或FIRST/FOLLOW冲突,则表明您的语法不明确,可能需要修改
+ b