资源简介
这是编译原理中对于一段代码进行四元式分析,对于正在学编译原理这门课的同学帮助很大哦!
代码片段和文件信息
#include
#include
#include
#include
#include
using namespace std;
//列表
#define ID 1 /* 标识符 */
#define DIGIT 2 /* 整数常量 */
#define MAINWORD 3 /* 保留字 */
#define SEMI 4 /* ;*/
#define DOT 5 /* . */
#define COMMA 6 /* ,*/
#define COLON 7 /* : */
#define LP 8 /* ( */
#define RP 9 /* ) */
#define PLUS 10 /* + */
#define MINUS 11 /* - */
#define MUL 12 /* * */
#define DIV 13 /* / */
#define EQUAL 14 /* = */
#define LESS 15 /* < */
#define GREATER 16 /* > */
#define YU 17 /* & */
#define HUO 18 /* | */
#define FEI 19 /* ! */
#define LESS_EQ 20 /* <= */
#define GREATER_EQ 21 /* >= */
#define NOT_EQ 22 /* <> */
#define IDENTI_EQ 23 /* := */
#define pNOTE 24 // /*
#define fNOTE 25 // */
#define NOTE 26 //
#define ERROR 99 /* 错误标志 */
#define FEOF 100 /* 输入结束标志 */
#define NONE 0 /* 无效数据类型 */
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//***********************************************【词法分析部分】*************************************************
struct Word //单词
{
char w[100];
int type;//类型
int row; //行
int col; //列
};
FILE *fp*FP;
int row=0count1=0count2=0count3=0;
static char *keyWords[]={“null““word““digit““mainword““;““.““““:““(““)““+““-“
“*““/““=““<““>““&““|““!““<=““>=““<>““:=““/*““*/““//“NULL};
static char *mainWords[]={“null““program““begin““end““var““integer““real““while““do““if““then““else“NULL};
int isOperator_1(char ch)//可能是单目运算符
{
return ch==‘;‘||ch==‘.‘||ch==‘‘||ch==‘(‘||ch==‘)‘||ch==‘+‘||ch==‘-‘||ch==‘=‘||ch==‘&‘||ch==‘|‘||ch==‘!‘||ch==‘*‘;
}
int isOperator_2(char ch)//可能是双目运算符
{
return ch==‘<‘ || ch==‘>‘ || ch==‘/‘ || ch==‘:‘;
}
struct Word getWord()
{
struct Word t;
char word[100];
static char arr[100]=“\n“;
static char *p=arr;
int i=0;
if(ferror(fp)) cout<<“feof!“< while(*p==‘\n‘ || *p==‘ ‘ || *p==‘\t‘)//忽略空格如果已到行尾,则读入下一行
{
if(*p==‘\n‘)
{
fgets(arr100fp);//从文件中读取下一行代码
if(feof(fp)){
t.type=FEOF;
return t;
}//文件已结束返回FEOF
p=arr;
row++;
continue;
}
p++;
}
t.type=ERROR;
if(isalpha(*p) || *p==‘_‘){//字母开头或下划线开头
while(isalpha(*p) || isdigit(*p) || *p==‘_‘)
word[i++]=*p++;
word[i]=‘\0‘;//结束
t.row=row; //记录行号
t.col=p-arr; //记录列号
for(int j=1;mainWords[j];j++){ //依次对比关键字
if(!strcmp(wordmainWords[j])){//返回0即找到关键字
t.type=MAINWORD;
strcpy(t.wword);//词素内容
count3++;
break;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-10-22 23:24 四元式生成\
文件 2143 2015-06-12 18:29 四元式生成\answer3.txt
文件 520 2015-06-12 18:03 四元式生成\test3.txt
文件 19980 2015-06-12 18:04 四元式生成\四元式.cpp
文件 6670065 2015-06-12 18:21 四元式生成\四元式.exe
- 上一篇:IT6801FN芯片资料及编程指导.zip
- 下一篇:纠错码的代数理论
相关资源
- FOR语句简单优先法四元式
- 编译原理,词法分析,语法分析,四
- 翻译程序设计输出四元式
- WHILE循环语句的翻译程序设计递归下降
- 编译课程设计算数表达式转换成四元
- 编译原理将简单程序翻译成四元式
- 赋值语句的翻译程序设计
- 编译原理中间代码生成
- 编译——while语句的翻译递归下降,四
- 编译原理FOR循环语句的翻译程序设计
- 赋值语句的翻译程序设计递归下降法
- C0编译器中间代码生成
- 编译的中间代码四元式生成
- 语法制导翻译与中间代码四元式的生
- 编译课设While循环LL(1)法,输出四元
- 布尔表达式的LR翻译器,中间代码为四
- 基于LR方法的WHILE循环语句的编译系统
- 目标代码生成 四元式
- DO-WHILE循环语句的翻译程序设计(简单
- IF-ELSE条件语句的翻译程序设计LL1法、
- 中间代码生成四元式设计
- IF-ELSE条件语句的翻译程序设计递归下
- LR分析表-语法树-四元式
- FOR循环语句的翻译程序设计(LL法、输
- 编译原理 词法、语法、语义分析生成
- 编译原理 四元式中间代码
- IF-ELSE条件语句的翻译程序设计简单优
- IF-ELSE条件语句的翻译程序设计递归下
- WHILE循环语句的翻译程序设计递归下降
- 将算术表达式转换成四元式的程序实
评论
共有 条评论