資源簡介
這是編譯原理中對于一段代碼進行四元式分析,對于正在學編譯原理這門課的同學幫助很大哦!

代碼片段和文件信息
#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
- 下一篇:糾錯碼的代數理論
評論
共有 條評論