資源簡介
能讀取詞法分析結果進行語法分析,在語法分析的同時進行語義分析,生成中間代碼;采用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++) //不足則補空格,保證狀態??倿?0大小,方便對齊
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帶孔平板有限元分析
評論
共有 條評論