编译原理的优先表
㈠ 编译原理算符优先分析法中构造分析表的时候,井号和其他符号的优先级怎么判断
产生式中,只有两种文法符号:终结符和非终结符。
所有的优先关系,也仅仅只存在于这两种符号之间。
并号不是产生式中的符号,它仅仅只是将两个左端相同的产生式写在一个式子里的省略写法用的辅助符号。
所以,它不存在优先关系。
遇到并号之类的辅助符号,应当将它们拆开,写成标准形式的产生式,再分析产生式中的优先关系。
㈡ 急!!!编译原理:算符优先表中“#”的作用及其优先次序的处理过程是如何进行的
#一般单独使用,不会与其他算符挣优先权
如果实在不知道,请使用括号号
㈢ 编译原理5:算符优先关系表构造
根据FIRSTVT和LASTVT构造算符优先关系表,规则简单来讲如下:
① 对于产生式形如 A→...ab... 则优先级a=b
②对于产生式形如 A→...aBc...则优先级a=c,a<FIRSTVT(B),LASTVT(B)>c
例:
㈣ 编译原理中FIRSTVT和LASTVT是什么意思
Firstvt和Lastvt是为了画算符优先关系表的(就是表里面填优先大于小于等于的那个)。
然后要注意他们可都是终结符的集合。
Firstvt
找Firstvt的三条规则:如果要找A的Firstvt,A的候选式中出现:
A->a.......,即以终结符开头,该终结符入Firstvt
A->B.......,即以非终结符开头,该非终结符的Firstvt入A的Firstvt
A->Ba.....,即先以非终结符开头,紧跟终结符,则终结符入Firstvt
Lastvt
找Lastvt的三条规则:如果要找A的Lastvt,A的候选式中出现:
A->.......a,即以终结符结尾,该终结符入Lastvt
A->.......B,即以非终结符结尾,该非终结符的Lastvt入A的Lastvt
A->.....aB,即先以非终结符结尾,前面是终结符,则终结符入Firstvt
㈤ 试述编译原理中优先函数有何好处与不足之处
构造算符优先分析表时使用的优先函数,其等价于矩阵表,但存储量校 定义两个函数,其对应元素的值为优先值,通过循环比较各元素的两个值,每次将优先级大的值改为小的值+1,若相等则都赋为目前较大的值,循环直至结果没有变化,构造OK
㈥ 编译原理问题--优先关系表怎么画
先求出FIRSTVT和LASTVT。
找Firstvt的三条规则:如果要找A的Firstvt,A的候选式中出现:
A->a.......,即以终结符开头,该终结符入Firstvt
A->B.......,即以非终结符开头,该非终结符的Firstvt入A的Firstvt
A->Ba.....,即先以非终结符开头,紧跟终结符,则终结符入Firstvt
找Lastvt的三条规则:如果要找A的Lastvt,A的候选式中出现:
A->.......a,即以终结符结尾,该终结符入Lastvt
A->.......B,即以非终结符结尾,该非终结符的Lastvt入A的Lastvt
A->.....aB,即先以非终结符结尾,前面是终结符,则终结符入Lastvt
然后逐条扫描文法规则。例题如下,参考这个例题能很好地理解如何构造优先关系表。
《编译原理》(第4版)第三章例题4.12
㈦ 谁能够解释下编译原理中什么是FIRSTVT,和LASTVT,尽量浅显易懂点谢谢
给你COPY一个看管用不,虽然不懂你在问什么...
算符优先分析 [上一节] [下一节]
5.2.1 算符优先文法及其优先表构造
一个文法,如果它的任一产生式的右部都不含两个相继(并列)的非终结符,即不含如下形式的产生式右部:
…QR…
则我们称该文法为算符文法。
在后面的定义中,a、b代表任意终结符;P、Q、R代表任意非终结符;‘…’代表由终结符和非终结符组成的任意序列,包括空字。
假定G是一个不含e-产生式的算符文法。对于任何一对终结符a、b,我们说:
1. a�6�7b当且仅当文法G中含有形如P→…ab…或P→…aQb…的产生式;
2. a�6�3b当且仅当G中含有形如P→…aR…的产生式,而Rb…或RQb…;
3. a�6�4b当且仅当G中含有形如P→…Rb…的产生式,而R…a或R…aQ。
如果一个算符文法G中的任何终结符对(a,b)至多只满足下述三关系之一:
a�6�7b,a�6�3b, a�6�4b
则称G是一个算符优先文法。
现在来研究从算符优先文法G构造优先关系表的算法。
通过检查G的每个产生式的每个候选式,可找出所有满足a�6�7b的终结符对。为了找出所有满足关系�6�3和�6�4的终结符对,我们首先需要对G的每个非终结符P构造两个集合FIRSTVT(P)和LASTVT(P):
FIRSTVT(P)={a | Pa…或PQa…,a�0�2VT而Q�0�2VN}
LASTVT(P)={a | P…a或P…aQ,a�0�2VT而Q�0�2VN}
5.2.2 算符优先分析算法
所谓素短语是指这样的一个短语,它至少含有一个终结符,并且,除它自身之外不再含任何更小的素短语。所谓最左素短语是指处于句型最左边的那个素短语。如上例,P*P和i是句型P*P+i的素短语,而P*P是它的最左素短语。
现在考虑算符优先文法,我们把句型(括在两个#之间)的一般形式写成:
#N1a1N2a2…NnanNn+1# (5.4)
其中,每个ai都是终结符,Ni是可有可无的非终结符。换言之,句型中含有n个终结符,任何两个终结符之间顶多只有一个非终结符。必须记住,任何算符文法的句型都具有这种形式。我们可以证明如下定理(证明留给有兴趣的读者作练习):
一个算符优先文法G的任何句型(5.4)的最左素短语是满足如下条件的最左子串Njaj…NiaiNi+1,
aj-1�6�3aj
aj�6�7 aj+1,…,ai-1�6�7ai
ai�6�4ai+1
根据这个定理,下面我们讨论算符优先分析算法。为了和定理的叙述相适应,我们现在仅使用一个符号栈S,既用它寄存终结符,也用它寄存非终结符。下面的分析算法是直接根据这个定理构造出来的,其中k代表符号栈S的使用深度。
5.2.3 优先函数
在实际实现算符优先分析算法时,一般不用表5.1这样的优先表,而是用两个优先函数f和g。我们把每个终结符q与两个自然数f(q)和g(q)相对应,使得
若q1�6�3q2 则 f(q1)<g(q2)
若q1�6�7q2 则 f(q1)= g(q2) (5.5)
若q1�6�4q2 则 f(q1)>g(q2)
函数f称为入栈优先函数,g称为比较优先函数。使用优先函数有两方面的优点:便于作比较运算,并且节省存储空间,因为优先关系表占用的存储量比较大。其缺点是,原先不存在优先关系的两个终结符,由于与自然数相对应,变成可比较的了。因而,可能会掩盖输入串的某些错误。但是,我们可以通过检查栈顶符号q和输入符号a的具体内容来发现那些原先不可比较的情形。
如果优先函数存在,那么,从优先表构造优先函数的一个简单方法是:
1. 对于每个终结符a(包括#)令其对应两个符号fa和ga,画一张以所有符号fa和ga为结点的方向图,如果a �6�4�6�7b,那么,就从fa画一箭弧至gb;如果a�6�3�6�7b,就画一条从gb到fa的箭弧。
㈧ 优先函数是什么编译原理
构造算符优先分析表时使用的优先函数,其等价于矩阵表,但存储量小。
定义两个函数,其对应元素的值为优先值,通过循环比较各元素的两个值,每次将优先级大的值改为小的值+1,若相等则都赋为目前较大的值,循环直至结果没有变化,构造OK
㈨ 编译原理简单优先算法分析
优先关系矩阵: 矩阵的行和列都是终结符,矩阵元素是终结符的优先关系。
为什么你的矩阵有非终结符