编译原理笔记13  自底向上分析技术…

简单优先分析法

一、基本思想

编译原理笔记13 <wbr> <wbr>自底向上分析技术-简单优先分析法

编译原理笔记13 <wbr> <wbr>自底向上分析技术-简单优先分析法

二、简单优先文法

a) 定义:一个文法G,如果它不含空串产生式,也不含任何右部相同的不同产生式,并且它的任何符号对(X,Y)---XY是非终结符或终结符---或者没有关系,或者存在优先级相同或低于、高于等关系之一,则这是一个简单优先文法。

b) 优先级别定义:

编译原理笔记13 <wbr> <wbr>自底向上分析技术-简单优先分析法

三、简单优先分析的思想

a) 简单优先矩阵:根据优先关系的定义,将简单优先文法中各文法符号之间的这种关系用一个矩阵表示,称为简单优先矩阵。

b) 简单优先分析法思想:PDA读入一个单词后,比较栈顶符号个该单词的优先级,若栈顶符号优先级低于该单词,继续读入 ;若栈顶符号优先级高于或等于读入符号,则找句柄进行规约,找不到句柄就继续读入。直到最后栈内只剩下开始符号,读入串读到‘#’为止。此时识别正确。

四、简单优先分析法的优缺点

a) 优点:技术简单

b) 缺点:适用范围小,分析表尺寸太大。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


一,实验目的: 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 二、实验要求: 1.对给定的程序通过词法分析器弄够识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示。而本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示。 2.本程序自行规定: (1)关键字"begin","end","if","then","else","while","write","read", "do", "call","const","char","until","procedure","repeat" (2)运算符:"+","-","*","/","=" (3)界符:"{","}","[","]",";",",",".","(",")",":" (4)其他标记 如字符串,表示以字母开头的标识符。 (5)空格、回车、换行符跳过。 部分程序代码如下: #include "stdio.h" #include "string.h" //----------------------Global Declarition--------------------------------- #define SIZE 20 #define sSIZE 12 //There are sSIZE status #define aSIZE 6 //There will ecounter aSIZE symbol #define gSIZE 3 //May be goto next gSIZE status #define geSIZE 6 //There are geSIZE generate expression #define MAXSIZE 3 //---------------------Finish defining struct------------------------------------- typedef struct Ge { char head; //Leftpart of Generate Expression char gen[4]; //Rightpart of Generate Expression }Generate;//--------------------------------Generate Expression base datastruct typedef struct A { int st[aSIZE]; //aSIZE status when encountering terminated symbol int re[aSIZE]; //Using reduce }Action;//----------------------------------Action table base datastruct typedef struct G { char head[gSIZE]; //Nonterminated symbol :'E' 'F' 'T'..etc int gt[gSIZE]; //Mark the next status }GOTO;//------------------------------------GOTO table base datastruct int status[SIZE]; //stack of status int sta_Index; //top of stack of status char symbol[SIZE]; //stack of symbol int sym_Index; //Current index of symbol stack char expression[SIZE]; //Inputed expression int exp_Index; //index of inputed expression int exp_top; //top of expression that inputed int step; //a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值