资源简介
编译原理大作业,C语言小子集编译程序-递归下降分析。本上机实习是为C语言(子集)设计一个编译程序,完成词法分析、语法分析、语义分析等功能,并生成某种机器上的目标代码(汇编语言)或中间代码(四元式)。
代码片段和文件信息
#include
using namespace std;
const int max_word = 505;
//关键字
const char keyWord[13][20] = {“main““if““else““do““while““for““switch“
“case““int““double““float““long““void“};
//单词表
struct Word{
char value[20];//单词值
int type;//单词种类
int line;//行号
}w[max_word];
//四元式
struct si_Yuan{
string op;//运算符
string s1;
string s2;
string res;//结果
}sy[105];
//文件流
FILE *fin*fout;
int line = 1;
char token[12];//存放单词
int flag = 0;//判断是否获取字符
int flag1 = 0flag2;//flag1判断是否项已经产生miss错误;
int e = 0;//错误个数
int sy_num = 0;//四元式的个数
string ops1ss1s2resres1res2op2op1;
int op_num = 0op_num1 = 0;//运算符的个数
int sy_id;//四元式的序号
string var[300];//已经声明的变量
int var_num = 0;//声明变量的个数
int sent_id;//判断ifwhile语句
string equ[300];//=
int abc;
int equ_num = 1; //=个数
int cnt = 0token_num = 0;//当前字符
int row = 1;//当前行数
char ch;
char ch1;
int word_num = 0;//单词的总个数
int word_cnt = 0;
string temp;
char str_int[20];
stackword_stack;//保存
stackop_stack;
//程序
void S();
void P();//(){分程序}
void P1();//分程序
void A();//变量说明部分
void B();//语句部分
void B1();
int C();//变量说明
void D();//标识符表
void D1();
void E();//标识符
void F();//字母
void G();//数字
void H();//语句
void I();//赋值语句
void J();//条件语句
void K();//循环语句
int L();//关系运算符
void M();//表达式
void M1();
void N();//项
void N1();
int O();//加法运算符
int Q();//乘法运算符
void R();//常量
void S();//无符号整数
void T();//数字序列
void W();//复合语句
void X();//条件
void Y();//语句1
void Z();//因子
//构造四元式
void siYuan(string opstring s1string s2string res)
{
sy[sy_num].op =op;
sy[sy_num].s1=s1;
sy[sy_num].s2=s2;
sy[sy_num].res=res;
sy_num++;
}
void printFour()//输出四元式
{
ofstream out(“sy.txt“);
int i;
for(i=0;i {
cout< out< }
}
void error(string err)//报错,定位到错误行
{
cout<<“第“< cout< e++;
}
//检查变量是否被声明
void is_say(string a)
{
int i;
for(i=1;i<=var_num;i++)
{
if(a.compare(var[i])==0)
{
break;
}
}
if(i>var_num)
{
cout<<“第 “< cout< e++;
}
}
void init_token(){
int i;
for(i = 0;i < 12;i++){
token[i] = NULL;
}
}
int judge_token(){
init_token();
if(flag == 0){
ch = getc(fin);
}
flag = 1;
while(ch == ‘ ‘ || ch == ‘\t‘ || ch == ‘\n‘){
if(ch == ‘\n‘){
row++;
}
ch=getc(fin);
}
token_num = 0;
if((ch>=‘a‘ && ch <= ‘z‘) || (ch >= ‘A‘ &&ch <= ‘Z‘)){
//可能为标识符或者变量名
while((ch>=‘a‘ && ch <= ‘z‘) || (ch >= ‘A‘ &&ch <= ‘Z‘) || (ch >= ‘0‘ && ch <= ‘9‘)){
token[token_num++] = ch;
ch = getc(fin);
}
token[token_num++] = ‘\0‘;
for(int i = 0;i <13;i++){
if(strcmp(t
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 132 2018-12-31 19:23 compiler.txt
文件 309 2018-12-31 19:23 sy.txt
文件 15070 2018-12-31 19:09 编译原理end.cpp
- 上一篇:编译原理语法分析代码
- 下一篇:算法分析与设计实验代码.cpp
相关资源
- 北邮-编译原理-词法分析
- 现代编译原理-C语言描述
- 编译原理实验报告+代码+使用说明
- 编译原理课程设计-C语言子集编译器
- 赋值语句翻译c语言实现四元式
- 编译原理用C++消除左递归
- 编译原理简易C编译器
- 实现语法分析器-编译原理
- 编译原理 LR分析器 c++代码
- 设计并实现TINYC语言的扫描程序TINYC
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 编译原理 LR0项目集规范族的构造 L
- 山东大学编译原理实验源代码c++版
- 简单函数绘图语言的解释器
- Lex和Yacc从入门到精通.pdf
- 简易词法分析器——基于C语言
- LL(1)文法的实现-mfc-编译原理学习
- 词法分析代码内有报告
- 编译原理LL1文法的mfc实现含消除左递
- 编译原理词法分析实验
- pl/0语言的编译器
- C++实现编译原理自动机、LL1文法、及
- 编译原理语义分析程序 c++实现
- 编译原理 课程设计 DAG 报告+源码C++版
- 编译原理课程设计----语法分析器(
- 编译原理简单的编译器源码
- C语言实现一个编译器-编译原理南开大
- 编译原理课程实验报告词法分析器及
- 编译原理与技术李文生:LR分析法C+
- C语言简化编译器前端 编译原理 LR1
评论
共有 条评论