资源简介
借助于词法分析程序提供的分析结果,编写一个算符优先语法分析程序,程序能进行语法结构分析和错误检查,并产生相应的归约信息。同时给出出错信息和错误类型,从而加深对语法分析的理解。

代码片段和文件信息
#include
#include
#include
#include
#include
#include
using namespace std;
struct token//token结构体
{
int code;
int num;
token *next;
};
token *token_head*token_tail;//token队列
struct number//number结构体
{
int num;
int value;
number *next;
};
number *number_head*number_tail;//number队列
struct str//string结构体
{
int num;
string word;
str *next;
};
str *string_head*string_tail;//string队列
struct ivan//表达式结构体
{
char left;
string right;
int len;
};
ivan css[20];//20个表达式
struct pank//action表结构体
{
char sr;
int state;
};
pank action[46][18];//action表
int go_to[46][11];//go_to表
struct ike//分析栈结构体,双链
{
ike *pre;
int num;
int word;
ike *next;
};
ike *stack_head*stack_tail;//分析栈首尾指针
void scan();//按字符读取源文件
int judge(char ch);//判断输入字符的类型
void out1(char ch);//写入token.txt
void out2(char chstring word);//写入number.txt
void out3(char chstring word);//写入string.txt
void input1(token *temp);//插入结点到队列token
void input2(number *temp);//插入结点到队列number
void input3(str *temp);//插入结点到队列string
void output();//输出三个队列的内容
void outfile();//输出三个队列的内容到相应文件中
void yufa_initialize();//初始化语法分析数据结构
int yufa_main(int a);//语法分析主体部分
int ID1(int a);//给输入字符编号,转化成action表列编号
string ID10(int i);//给输入字符反编号
int ID2(char ch);//给非终结状态编号,转化成go_to表列编号
int ID20(char ch);//给非终结状态编号
char ID21(int j);//给非终结状态反编号
void add(ike *temp);//给ike分析栈链表增加一个结点
void del();//给ike分析栈链表删除一个结点
FILE *fp;//文件
int wordcount;//标志符计数
int numcount;//整型常数计数
int err;//标志词法分析结果正确或错误
int nl;//读取行数
void main()
{
token_head=new token;
token_head->next=NULL;
token_tail=new token;
token_tail->next=NULL;
number_head=new number;
number_head->next=NULL;
number_tail=new number;
number_tail->next=NULL;
string_head=new str;
string_head->next=NULL;
string_tail=new str;
string_tail->next=NULL;//初始化三个队列的首尾指针
wordcount=0;//初始化字符计数器
numcount=0;//初始化常数计数器
err=0;//初始化词法分析错误标志
nl=1;//初始化读取行数
scan();
if(err==0)
{
char m;
cout<<“词法分析正确完成!“< cin>>m;
output();
if(m==‘y‘)
{
cout<<“结果同时保存在token.txt、number.txt和sting.txt三个文件中,请打开查看“< outfile();
}
}
yufa_initialize();//初始化语法分析数据结构
token *temp;
temp=new token;
temp=token_head->next;
int pq;
p=0;
q=0;
cout< while(temp!=NULL)
{
int w;
w=ID1(temp->code);
p=yufa_main(w);
if(p==1) break;
if(p==0)
temp=temp->next;
if(temp==NULL) q=1;
}//语法分析
if(q==1)
while(1)
{
p=yufa_main(17);
if(p==3) break;
}//最后输入$来完成语法分析
cout< system(“pause“);
}
void scan()
{
char ch;
string word;
char document[50];
int flag=0;
cout<<“请输入源文件路径及名称:“;
cin>>document;
cout< if((fp=fopen(document“rt“))==NULL)
{
err=1;
cout<<“无法找到该文件!“< return;
}
while(!feof(fp))
{
word=““;
ch=fgetc(fp);
flag=judge(ch);
if(flag==1)
out1
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3963 2005-06-15 10:52 语法分析2002112105\SS.clw
文件 115712 2005-06-15 11:06 语法分析2002112105\SS.ncb
文件 4215 2005-06-14 02:13 语法分析2002112105\ReadMe.txt
文件 3409 2005-06-14 15:19 语法分析2002112105\SS.cpp
文件 1054 2005-06-14 02:13 语法分析2002112105\StdAfx.h
文件 204 2005-06-14 02:13 语法分析2002112105\StdAfx.cpp
文件 1384 2005-06-14 15:19 语法分析2002112105\SS.h
文件 49664 2005-06-15 11:06 语法分析2002112105\SS.opt
文件 1298 2005-06-15 10:51 语法分析2002112105\SS.plg
文件 6031 2005-06-15 09:03 语法分析2002112105\SS.dsp
文件 1431 2005-06-14 12:09 语法分析2002112105\SSDoc.h
文件 1738 2005-06-14 02:13 语法分析2002112105\SSDoc.cpp
文件 524 2005-06-15 10:55 语法分析2002112105\Test.pl0
文件 1096 2005-06-15 09:16 语法分析2002112105\Resource.h
文件 529 2005-06-14 02:34 语法分析2002112105\SS.dsw
文件 381 2005-06-14 16:59 语法分析2002112105\MFC469.tmp
文件 387 2005-06-14 17:00 语法分析2002112105\MFC163.tmp
文件 2454 2001-10-06 21:44 语法分析2002112105\ColorPicker.h
文件 387 2005-06-14 17:00 语法分析2002112105\MFC46C.tmp
文件 1397 2005-06-14 16:36 语法分析2002112105\SetDlg.h
文件 479313 2005-06-15 10:51 语法分析2002112105\编译器.exe
文件 1576 2005-06-14 16:05 语法分析2002112105\SourceEditView.h
文件 1928 2005-06-14 16:12 语法分析2002112105\SSView.h
文件 14227 2005-06-15 09:16 语法分析2002112105\SS.rc
文件 1182 2005-06-14 15:17 语法分析2002112105\Logo.cpp
文件 74949 2005-01-05 08:01 语法分析2002112105\OfficeXPMenu.cpp
文件 10680 2005-01-05 07:54 语法分析2002112105\OfficeXPMenu.h
文件 832 2005-06-14 15:17 语法分析2002112105\Logo.h
文件 1229 2005-06-14 13:47 语法分析2002112105\LogoDlg.h
文件 993 2005-06-14 13:47 语法分析2002112105\LogoDlg.cpp
............此处省略29个文件信息
- 上一篇:数字电路期末试卷
- 下一篇:1602 18B20温度报警器.
相关资源
- 编译原理实验工具及参考源码(lex&
- 类pascal语言编译器(编译原理实验)
- 编译原理课程设计:词法语法编译器
- 中科院 编译原理 习题及解答
- 编译原理四元式和逆波兰式
- 《编译原理》清华大学版中的pl0扩充
- PL/0功能扩充break功能
- 编译原理LR(0)语法分析
- 编译原理中间代码生成程序
- 编译原理:LR分析程序
- 编译原理实验:词法分析,语法分析
- 吉林大学编译原理课件
- 编译原理龙书答案
- 编译原理 第三章课后习题答案
- 易语言变量和数组的编译原理
- 编译原理语法分析器、词法分析器
- 山东大学编译原理PL/0语言 compiler实验
- FOR循环语句的翻译程序设计简单优先
- NFA的确定化NFA->DFA完整可运行代码
- 哈工大威海编译原理实验报告和源代
- 哈工大威海-编译原理实验报告和源码
- 编译原理课设c编译器
- 赋值语句翻译四元式
- 河北工业大学编译原理实验代码及实
- 编译原理课程设计 while do循环语句翻
- 编译原理课程设计do——while简单优先
- 南开大学编译原理课件及作业
- 华工往年编译原理试卷
- 编译原理课程设计for循环LR法三元式
- 哈工程-编译原理课程设计(2016级)
评论
共有 条评论