Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing LL-1解析器:下面的集合真的有必要吗?_Parsing_Compiler Construction_Grammar_Context Free Grammar_Ll - Fatal编程技术网

Parsing LL-1解析器:下面的集合真的有必要吗?

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中是否没有+,然后使

据我所知,如果输入流中存在错误,那么FOLLOW Set会在第一个可能的时刻告诉我。是这样吗

否则我想知道你到底需要它做什么。考虑到解析器在栈的顶部有一个非终结符(在我们的类中,我们使用一个堆栈作为LL解析器的抽象)

i、 e

由于X位于堆栈的顶部,因此下一步将替换X(假设它是非端子)。因此,解析器向解析表请求使用x的派生表达式。
+ b
其中
+
b
都是终端

假设X的第一个集合中有
,即空字符串。而且在他的第一套中没有
+

据我所知,在这种情况下,解析器可以简单地检查第一组X中是否没有
+
,然后使用派生,使X分解为
即空字符串,因为这是解析器能够继续解析输入而不抛出错误的唯一方法。如果输入流无效,解析器将在稍后的某个时刻识别它。我知道FOLLOW集合可以帮助您立即确定解析是否可以在没有错误的情况下继续

我的问题是——这真的是FOLLOW set扮演的唯一角色吗

我希望我的问题属于这里——如果不是,我很抱歉。如果有不清楚的地方,请随时要求澄清


提前谢谢你

你说得对。解析器最终可以继续解析,并最终以另一种方式找到冲突。 除此之外,FOLLOW集合可以非常方便地对语法进行推理。不是由解析器,而是由构造语法的人。例如,如果您发现存在任何FIRST/FIRST或FIRST/FOLLOW冲突,则表明您的语法不明确,可能需要修改

+ b