资源简介
能读取词法分析结果进行语法分析,在语法分析的同时进行语义分析,生成中间代码;采用LR分析法的实现
代码片段和文件信息
#include “string.h“
#include “stdio.h“
#include “stdlib.h“
#include “malloc.h“
#include “cifafenxi.h“
char state[20]={0} ; //状态栈
char yuyi[10] = ““; //语义栈
char fuhao[30] = “$“; //符号栈
char input[80] = ““; //输入符号栈
int nextq=0; //四元式生成变量之序号
char si_n[10]; //四元式之数字部分
char si_s[10][5]; //四元式之操作符部分
char si3[10]; //第三部分
char si4[10]; //第四部分
//0--->9 文法
const char wf1[10][5]={“S““E““E““T““T““F““F““F““F““F“};
const char wf2[10][11]={“E““EorT““T““TandF““F““notF““(E)““AropA““iropi““i“};
const int wf3[10]={1313123331}; //各条需回退几步
const int wf4[10]={09911111010101010}; //各条在表中对应的坐标
//LR分析表
const char lr_f[19][8]={
000‘S‘0‘S‘0‘S‘
‘a‘0‘S‘00000
‘r‘‘S‘‘r‘000‘r‘0
‘r‘‘r‘‘r‘000‘r‘0
000‘S‘0‘S‘0‘S‘
000‘S‘0‘S‘0‘S‘
0000‘S‘000
00000000
‘r‘‘r‘‘r‘000‘r‘0
‘r‘‘r‘‘r‘0‘S‘0‘r‘0
0000000‘S‘
‘r‘‘r‘‘r‘000‘r‘0
000‘S‘0‘S‘0‘S‘
000‘S‘0‘S‘0‘S‘
‘r‘‘r‘‘r‘000‘r‘0
00‘S‘000‘S‘0
‘r‘‘r‘‘r‘000‘r‘0
‘r‘‘r‘‘r‘000‘r‘0
‘r‘‘S‘‘r‘000‘r‘0} ; //主要动作第一部分(‘S‘ or ‘r‘ or ‘a‘(acc))
const int lr_s[19][12]={
000405096132
0012000000000
2132000200000
444000400000
0004050960140
0004050961532
000070000000
000000008000
777000700000
9990100900000
0000000110000
888000800000
0004050960318
0004050960170
555000500000
00120001600000
666000600000
333000300000
1121000100000} ; //主要部分第二部分(数字)
/*定义必须在程序之前!!!!*/
int pi=0ps=0py=0pf=0;
void main()
{
int t1=0t2=0; //临时变量
char ts[10]={0}; //临时字符串变量
int bz=1; //步骤
int flag=1; //是否读取下一个字符:1读取,0不读取
/*输入待分析字符串*/
p=0;
printf(“\n Please input string with the end of ‘$‘:\n“);
do
{
ch=getchar();
prog[p]=ch;
p++;
}while(ch!=‘$‘);
t1=0;
p=0;
/*pi输入符号栈指针,ps状态,py语义,pf符号*/
strcpy(inputprog); //拷贝一份到input[]中以用作处理
printf(“步骤 状态栈 语义栈 符号栈 输入符号栈 主要动作 \n“);
scaner();
while(1)
{
printf(“%-4d“bz++);
t1=0t2=0;
do{
printf(“%d|“state[t1]);
if(state[t1++]>=10)
t2+=3; //t2为状态栈显示所占位置的大小
else
t2+=2;
}while(state[t1]!=0);
for(t1=0;t1<20-t2;t1++) //不足则补空格,保证状态栈总为20大小,方便对齐
printf(“ “);
for(t1=1;t1<=py;t1++) //打印语义栈
printf(“_%d“yuyi[t1]);
for(t1=0;t1<8-py*2;t1++)
printf(“ “);
printf(“ %-13s\t%-13s\t%c%d\n“fuhaoinputlr_f[state[ps]][syn]lr_s[state[ps]][syn]);
//syn是
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3229 2008-01-19 16:56 编译原理\cifafenxi.h
文件 5291 2008-01-19 11:28 编译原理\main.c
文件 184406 2008-01-19 16:56 编译原理\main.exe
目录 0 2010-05-06 11:26 编译原理
----------- --------- ---------- ----- ----
192926 4
- 上一篇:中科大软院数据库考试题
- 下一篇:ABAQUS带孔平板有限元分析
评论
共有 条评论