• 大小: 1.66MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-02
  • 语言: 其他
  • 标签: 四元式  

资源简介

这是编译原理中对于一段代码进行四元式分析,对于正在学编译原理这门课的同学帮助很大哦!

资源截图

代码片段和文件信息

#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

评论

共有 条评论