資源簡介
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病毒的分析
評論
共有 條評論