一个编译原理的问题
创始人
2025-06-25 22:40:41
0次
一个编译原理的问题书上说了个终结首符集FIRST(a)还有一个FOLLOW(A)这个follow是什么集合这两个集合的交集是什么意思麻烦大神用通俗的语言解析一下谢谢
First(α) 是符号串α的开始符号集合。
也就是说,用推导的方法对α进行推导,一次次地使用产生式,用产生式右部的符号串替换一个非终结符,所有那些可能出现在第一个符号位置的终结符,就构成了开始符号集。
比如,在C语言中,对于符号串“语句”来说,标识符(赋值语句)、if(条件语句)、printf(输出函数)这些单词(终结符)都是它开始符号集合中的元素,而+(加号)、}(右花括号)不可能出现在“语句”的开头,所以不是它的开始符号集合中的元素。
Follow(A)是非终结符A的后跟符号集合。
它是指在所有可能的句型中,一切可能出现在非终结符A后面的一个终结符。
这里要特别注意是在“句型”中。
你可以自己举例,比如分析一下C语言中“表达式”后面可能跟哪些单词,它们就是非终结符“表达式”后跟符号集合中的元素。
你说的这两个集合的交集问题不存在。
因为它们针对的是不同类型的对象(一个是符号串,另一个是某个非终结符)。
实际上,在选择集合问题中,考虑的不是它们的交集,而是一个产生式右部符号串的First集跟这个产生式左端非终结符的Follow集的并集。
考虑交集的,发生在相同左部的不同产生式的选择集合之间。
相关内容