全球旧事资料 分类
法分析要处理的输入是词法分析的输出即单词序列。该部分主要用到两个栈,一个用来保存单词标志号的状态栈另一是用来保存单词本身信息的符号栈。程序从词法分析输出的单词序列中读取一个单词,检查单词是否是合法单词,如果是合法的,则取符号栈的栈顶元素,和当前单词的标志号进行优先级比较,如果小于当前单词的优先级那么将当前单词压入符号栈,将其标志号压入状态栈;如果大于当前单词的优先级那么继续弹出状态栈的元素,和上一个符号栈弹出的元素进行比较,如果两优先级相等则继续弹,如果小于上一次弹出的元素的优先级,则弹的所有元素按先后弹的倒置顺序排列为一个句柄,查找产生式找到相应的产生式进行规约,把规约或的元素当多当前一的元素继续进行比较,直到词法分析输出结果全部遍历完。在规约的过程中记下规约的次数,和每次规约的元素,以便语义分析和中间代码生成。
(3)语义分析
语义分析主要是将语义分析结果转化成三地址码表示的中间代码的过程。在语法分析的过程中,在每次规约的过程中记录规约的类型和各个类型规约的次数。即当规约的语句是布尔表达式时每规约一次都将规约的语句转化成三地
f址码的形式保存在字符串E中并记录E中规约产生式的次数在m1quad中;如果规约的产生式是第一个赋值语句块中的赋值语句,则将规约的产生式以三地址形式保存在字符串B1中并记录B1中规约产生式的次数在m2quad中;如果规约的产生式是第二个赋值语句块中的赋值语句,则将规约的产生式以三地址形式保存在字符串B2中并记录B2中规约产生式的次数在m3quad中。最后控制将B1、B2和E中的内容输入。
三、LL(1)文法
LL1文法分析流程图:
构造不带回溯的自上而下分析的文法条件1文法不含左递归,2对于文法中每一个非终结符A的各个产生式的候选首符集两两不相交。即,若A→12…
则FIRSTi∩FIRSTj=ij3对文法中的每个非终结符A,若它存在某个候选首符集包含,则FIRSTA∩FOLLOWA如果一个文法G满足以上条件,则称该文法G为LL1文法。构造预测分析表的步骤:①对每个产生式A→1…
执行②③。②对FIRSTA中每个终结符a把A→i加入到MAa其中a∈FIRSTi③若ε∈FIRSTi则对任何属于FOLLOWA的终结符b将A→i加入MAb。④把所有无定义的MAa标记为出错。
在上面的属性文法中我们使用了这样的假定:每当需要临时变量时,
ewtemp产生新的临时名字;lookupid
ame用于根据名字的拼写检查符号表中是否存在该名字的条目。如果有r
好听全球资料 返回顶部