資源簡介
基于LR(0)方法的語法分析程序
直接輸入根據己知文法構造的LR(0)分析表。
目的和其它要求參考“基于LL(1)方法的詞法分析程序”

代碼片段和文件信息
#include?
#include?
#include?
#define?stack_size?20
#define?stackincrement?10
using?namespace?std;
int?p?=?0?q?=?0?zh?sh?x;
char?Vn[3]?=?{?‘E‘‘A‘‘B‘?};?//非終結符
char?Vt[5]?=?{?‘a‘‘b‘‘c‘‘d‘‘#‘?};?//終結符
typedef?struct?{
char?*bottom;
char?*top;
int?size;
//?char?data[stack_size];
}stack;
int?Initstack(stack?&s)?//初始化棧
{
s.bottom?=?(char?*)malloc(stack_size?*?sizeof(char));
if?(!s.bottom)?exit(-1);
s.top?=?s.bottom;
s.size?=?stack_size;
return(1);
}
int?push(stack?&s?char?e)?//入符號棧
{
//int?i;
if?(s.top?-?s.bottom?>=?s.size)?{
s.bottom?=?(char*)realloc(s.bottom?(stack_size?+?stackincrement)?*?sizeof(char));//棧如果不夠擴容
if?(!s.bottom)?exit(-1);//擴容不了返回-1
s.top?=?s.bottom?+?s.size;
s.size?+=?stackincrement;
}
*s.top++?=?e;//s.top=es.top++
?//cout?< ?//?s.data[x]=e;?
?//?x++;
?//輸出所有元素
?//?for(i=0;i return(1);
}
int?push2(stack?&s?int?e)?//入狀態棧
{
//int?i;
if?(s.top?-?s.bottom?>=?s.size)?{
s.bottom?=?(char
*)realloc(s.bottom?(stack_size?+?stackincrement)?*?sizeof(char));
if?(!s.bottom)?exit(-1);
s.top?=?s.bottom?+?s.size;
s.size?+=?stackincrement;
}
*s.top++?=?e;
//cout?< return(1);
}
int?pop(stack?&s?char?*e)?//出符號棧
{
if?(s.top?==?s.bottom)
return(0);
*e?=?*--s.top;
//cout?<*e?<“出符號棧“?<“?“;
return(1);
}
int?pop2(stack?&s?int?*e)?//出狀態棧
{
if?(s.top?==?s.bottom)
return(0);
*e?=?*--s.top;
//cout?<*e?<“出狀態棧“?<“?“;
return(1);
}
int?action(int?m?int?n?char?a)?//ACTION?表
{
int?i;
int?act[12][5]?=
{
{?23000?}
{?000020?}
{?004100?}
{?005110?}
{?004100?}
{?005110?}
{?2121212121?}
{?2222222222?}
{?2323232323?}
{?2525252525?}
{?2424242424?}
{?2626262626?}
};
for?(i?=?0;?i if?(a?==?Vt[i])//找到終結符對應的i
break;
if?(i?==?n?&&?a?!=?Vt[n?-?1])
return(0);//
else
{
zh?=?act[m][i];
//if(zh==0)cout<<“出錯“< //else?return(zh);
return(zh);
}
}
int?go(int?m?int?n?char?a)?//goto?表
{
int?i;
int?go[12][3]?=
{
{?100?}
{?000?}
{?060?}
{?007?}
{?080?}
{?009?}
{?000?}
{?000?}
{?000?}
{?000?}
{?000?}
{?000?}
};
for?(i?=?0;?i if?(a?==?Vn[i])
break;
if?(i?==?n?&&?a?!=?Vn[n?-?1]
)return(0);
else
{
sh?=?go[m][i];
//if(sh==0)cout<<“出錯“;
//else?return(sh);
return(sh);
}
}
void?main()
{
char?ch?y;
int?x?v?e?u?ok?=?1;
int?i?=?0?index?=?0?k;
char?st[20];
stack?s;//符號棧
stack?t;//狀態棧
cout?<“?輸入要分析的字符串(end?by?‘;‘):“?< cin?>>?st[0];
while?(st[i]?!=?‘;‘)
{
i++;
cin?>>?st[i];
}
st[i]?=?‘#‘;
Initstack(s);//初始化符號棧
Initstack(t);//初始化狀態棧
push(s?‘#‘);
push2(t?0);
while?(ok?==?1)?{
ch?=?st[index];//字符串集
index++;
cout?<“分析:“?<
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????..A..H.?????38912??2018-12-07?20:19??編譯原理實驗3\.vs\編譯原理實驗3\v15\.suo
?????文件????5476352??2018-12-07?20:19??編譯原理實驗3\.vs\編譯原理實驗3\v15\Browse.VC.db
?????文件???29622272??2018-12-07?20:04??編譯原理實驗3\.vs\編譯原理實驗3\v15\ipch\AutoPCH\5f476cb0c9c0ba1a\MAIN.ipch
?????文件??????86528??2018-12-07?20:04??編譯原理實驗3\Debug\編譯原理實驗3.exe
?????文件?????621700??2018-12-07?20:04??編譯原理實驗3\Debug\編譯原理實驗3.ilk
?????文件?????839680??2018-12-07?20:04??編譯原理實驗3\Debug\編譯原理實驗3.pdb
?????文件???15269888??2018-12-04?10:34??編譯原理實驗3\ipch\編譯原理實驗3-16e6d0ab\編譯原理實驗3-d27ad4b5.ipch
?????文件?????????96??2018-12-13?13:13??編譯原理實驗3\代碼原地址.txt
?????文件??????46176??2018-12-13?13:12??編譯原理實驗3\內置的文法.png
?????文件????????750??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\cl.command.1.tlog
?????文件??????11940??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\CL.read.1.tlog
?????文件????????486??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\CL.write.1.tlog
?????文件??????????2??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\li
?????文件??????????2??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\li
?????文件??????????2??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\li
?????文件??????????2??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\li
?????文件??????????2??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\li
?????文件??????????2??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\li
?????文件???????1728??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\li
?????文件???????4016??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\li
?????文件???????1050??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\li
?????文件??????77840??2018-12-07?20:04??編譯原理實驗3\編譯原理實驗3\Debug\main.obj
?????文件????????438??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\mt.command.1.tlog
?????文件????????418??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\mt.read.1.tlog
?????文件????????418??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\mt.write.1.tlog
?????文件????????632??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\rc.command.1.tlog
?????文件????????390??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\rc.read.1.tlog
?????文件????????398??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\rc.write.1.tlog
?????文件?????207872??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\vc100.idb
?????文件?????233472??2018-12-04?10:35??編譯原理實驗3\編譯原理實驗3\Debug\vc100.pdb
............此處省略41個文件信息
評論
共有 條評論