资源简介
1.实验目的
设计一个LR分析器,实现对表达式语言的分析,加深对LR语法分析方法的基本思想的理解,掌握LR分析器设计与实现的基本方法。
2.实验要求
建立文法及其LR分析表表示的数据结构,设计并实现一个LALR(1)的分析器,对源程序经词法分析后生成的二元式代码流进行分析,如果输入串是文法定义的句子则输出“是”,否则输出“否”。

代码片段和文件信息
#include“status_stack.h“
#include“symbol_instr_stack.h“
#include“lr.h“
//打印LR分析器的工作过程
void print(status *status_psymbol_instr *symbol_psymbol_instr *instr_p)
{
int i;
out_stack(status_p);
for(i=0;i<20-status_p->top;i++)
printf(“ “);
out_stack1(symbol_p);
for(i=0;i<20;i++)
printf(“ “);
out_stack2(instr_p);
printf(“\n“);
}
//状态转换函数
int goto_char(status *status_psymbol_instr *instr_p)
{
char x;
int yz;
x = get_top(instr_p);
y = get_top(status_p);
z = get_index_char(x);
return table[y][z];
}
//移进--规约函数
void action(status *status_psymbol_instr *symbol_psymbol_instr *instr_p)
{
int ijx;
char a;
i = goto_char(status_pinstr_p);
//规约出错
if(i == -1)
printf(“\n===============规约出错!================\n“);
//规约成功
if(i == 12)
printf(“\n===============规约成功!================\n“);
//移进动作
if(i>=0 && i<=11)
{
push(status_pi);
a = pop(instr_p);
push(symbol_pa);
print(status_psymbol_pinstr_p);
action(status_psymbol_pinstr_p);
}
//规约动作
if(i>=21 && i<=26)
{
x = r[i-21].y;
for(j=0;j {
pop(status_p);
pop(symbol_p);
}
push(instr_pr[i-21].x);
action(status_psymbol_pinstr_p);
}
}
int main()
{
char x;
//分配空间
status *status_p;
symbol_instr *symbol_p*instr_p ;
status_p = (status *)malloc(sizeof(status));
symbol_p = (symbol_instr *)malloc(sizeof(symbol_instr));
instr_p = (symbol_instr *)malloc(sizeof(symbol_instr));
//初始化各栈
init_stack(status_p);
init_stack(symbol_p);
init_stack(instr_p);
//压进栈初始元素
push(status_p0);//
push(symbol_p‘#‘);//
//输入表达式
printf(“\n请输入要规约的输入串,各字符之间不能有空格,以‘#‘字符结束!\n“);
printf(“===========expression =“);
//先将输入串压进符号栈
do{
scanf(“%c“&x);
push(symbol_px);
}while(x != ‘#‘);
//然后由符号栈弹出,压进输入栈
while( symbol_p->top != 0)
{
x = pop(symbol_p);
push(instr_px);
}
printf(“\n\n“);
//打印框架
printf(“\n状态栈==============符号栈==============输入串\n“);
print(status_psymbol_pinstr_p);//打印初始分析表
//移进,规约,并打印每一步分析过程
action(status_psymbol_pinstr_p);
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2252 2007-06-20 08:05 LR分析器 C 语言实现\编译原理课程设计\26.cpp
文件 923 2007-06-10 19:39 LR分析器 C 语言实现\编译原理课程设计\lr.h
文件 883 2007-06-10 19:39 LR分析器 C 语言实现\编译原理课程设计\status_stack.h
文件 1118 2007-06-10 19:40 LR分析器 C 语言实现\编译原理课程设计\symbol_instr_stack.h
文件 262144 2007-06-03 10:39 LR分析器 C 语言实现\编译原理课程设计\《编译原理》实验.doc
文件 30720 2007-06-20 22:15 LR分析器 C 语言实现\编译原理课程设计\任务书.doc
文件 128375 2008-06-06 17:16 LR分析器 C 语言实现\编译原理课程设计\我的报告.doc
目录 0 2008-06-06 18:00 LR分析器 C 语言实现\编译原理课程设计
目录 0 2010-06-01 18:42 LR分析器 C 语言实现
----------- --------- ---------- ----- ----
426415 9
- 上一篇:Tesseract-OCR及VS调用API配置文件
- 下一篇:关于sola病毒的分析
相关资源
- I2C读写AT24C02 基于STM32F103 cube116540
- Scratch源码
- Microsoft Forms 2.0107770
- 实验三 消息中间件应用开发:Active
- WCE注入工具
- ModelGoon-4.4.1-site.zip
- AsyncTask文件控制暂停和继续,在状态
- Visio大全模具(含Cisco、IBM等常用拓扑
- 信号奇异点Lipschitz指数计算
- 基于STM32RCT6的步进电机驱动程序
- 酒店管理系统基于Qt Creator5)
- 用友NC开发API字典
- Navicat Premium 15汉化包.zip55438
- 登录注册界面.zip48872
- 条码字体barcode128
- Rational Rose Common破解文件
- res10_300x300_ssd_iter_140000.caffemodel与dep
- scratch 第1课 翻跟斗的小猫(入门)
- stm32f407上的两个can发送和接收例程
- Scrach 欢乐狙击手.sb2
- 04741计算机网络原理知识点整理.docx(
- Wolfram Mathematica 矩阵初等变换函数(
- pscad近海风电模型 Fortran语言
- 程序员专用字体YaHei.Consolas.1.11b42517
- scratch3.0 源程序(说相声)
- AutoCAD永久去教育版破解补丁
- 开源1A锂电池充电板TP4056原理图+PCB
- m1卡 ic卡可选择扇区初始化加密软件
- TSCC.exe
- 欧姆龙CP1系列单轴定位PLC程序.cxp
评论
共有 条评论