• 大小: 653KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-07-05
  • 语言: 其他
  • 标签: 编译原理  源代码  

资源简介

词法分析器:1) 定义目标语言的可用符号表和构词规则; 2) 依次读入源程序符号,对源程序进行单词切分和识别,直到源程序结束; 3) 对正确的单词,按照它的种别以的形式保存在符号表中; 4) 对不正确的单词,做出错误处理。 算符优先算法: 若输入文法: E->E+T | T T->T*F | F F-> (E) | i 根据算符优先分析法,将赋值语句进行语法语义分析,翻译成等价的一组基本操作,每一基本操作用四元式表示

资源截图

代码片段和文件信息

#include 
#include 
#include 
//#include

using namespace std;
string KEYWORD[15]= {“if““else““void““return““while““then““for““do“     //关键字
                     “int““char““double““float““case““cin““cout“
                    };
char SEPARATER[8]= {‘;‘‘‘‘{‘‘}‘‘[‘‘]‘‘(‘‘)‘};   //界符
char OPERATOR[8]= {‘+‘‘-‘‘*‘‘/‘‘>‘‘<‘‘=‘‘!‘};    //运算符
char FILTER[4]= {‘ ‘‘\t‘‘\r‘‘\n‘};                   //过滤符(空格 水平制表 回车 换行)
const int IDENTIFIER=200;         //标识符值
const int CONSTANT=201;           //常数值
const int FILTER_VALUE=202;       //过滤字符值


//判断是否为关键字
bool IsKeyword(string word)
{
    for(int i=0; i<15; i++)
    {
        if(KEYWORD[i]==word)
        {
            return true;
        }
    }
    return false;
}
//判断是否为界符
bool IsSeparater(char ch)
{
    for(int i=0; i<8; i++)
    {
        if(SEPARATER[i]==ch)
        {
            return true;
        }
    }
    return false;
}

//判断是否为运算符
bool IsOperator(char ch)
{
    for(int i=0; i<8; i++)
    {
        if(OPERATOR[i]==ch)
        {
            return true;
        }
    }
    return false;
}
//判断是否为过滤符
bool IsFilter(char ch)
{
    for(int i=0; i<4; i++)
    {
        if(FILTER[i]==ch)
        {
            return true;
        }
    }
    return false;
}
//判断是否为大写字母
bool IsUpLetter(char ch)
{
    if(ch>=‘A‘ && ch<=‘Z‘) return true;
    return false;
}
//判断是否为小写字母
bool IsLowLetter(char ch)
{
    if(ch>=‘a‘ && ch<=‘z‘) return true;
    return false;
}
//判断是否为数字
bool IsDigit(char ch)
{
    if(ch>=‘0‘ && ch<=‘9‘) return true;
    return false;
}
//返回每个字的值
template 
int value(T *aint nT str)
{
    for(int i=0; i<=n; i++)
    {
        if(a[i]==str) return i+1;
    }
    return -1;
}
//词法分析
void analyse(FILE * fpin)
{
    //ofstream f(“词法分析的结果.txt“);
    char ch=‘ ‘;
    string arr=““;
    while((ch=fgetc(fpin))!=EOF)//当不为结束字符时
    {
        arr=““;
        if(IsFilter(ch)) {}             //判断是否为过滤符
        else if(IsLowLetter(ch))        //判断是否为关键字
        {
            while(IsLowLetter(ch))
            {
                arr += ch;
                ch=fgetc(fpin);
            }
            fseek(fpin-1LSEEK_CUR);
            if(IsKeyword(arr))
            {
                cout<<“1“<<“ “<<‘\t‘<            }
            else
            {
                cout<<“2“<<“ “<<‘\t‘<            }
        }
        else if(IsDigit(ch))            //判断是否为数字
        {
            while(IsDigit(ch)||(ch==‘.‘&&IsDigit(fgetc(fpin))))
            {
                arr += ch;
                ch=fgetc(fpin);
            }

            fseek(fpin-1LSEEK_CUR);
            cout<<“3“<<“ “<<‘\t‘<        }
        else if(IsUpLetter(ch)||IsLowLetter(ch)||ch==‘_‘)
        {
            while(IsUpLetter(ch)||IsLowLetter(ch)||ch==‘_‘||IsDigit(ch))
            {
     

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     988337  2018-05-27 10:19  编译原理--词法分析器+语法分析器 源代码\词法分析器\bin\Debug\词法分析器 .exe

     文件       4975  2018-05-27 17:12  编译原理--词法分析器+语法分析器 源代码\词法分析器\main.cpp

     文件      40555  2018-05-27 10:19  编译原理--词法分析器+语法分析器 源代码\词法分析器\obj\Debug\main.o

     文件       1116  2018-05-26 20:52  编译原理--词法分析器+语法分析器 源代码\词法分析器\词法分析器 .cbp

     文件        147  2018-05-27 10:21  编译原理--词法分析器+语法分析器 源代码\词法分析器\词法分析器 .depend

     文件        321  2018-05-27 17:12  编译原理--词法分析器+语法分析器 源代码\词法分析器\词法分析器 .layout

     文件        152  2018-05-27 10:14  编译原理--词法分析器+语法分析器 源代码\词法分析器\词法分析器.depend

     文件        323  2018-05-27 10:19  编译原理--词法分析器+语法分析器 源代码\词法分析器\词法分析器.layout

     文件     976279  2018-05-28 13:18  编译原理--词法分析器+语法分析器 源代码\语法分析器\bin\Debug\词法分析器.exe

     文件     976309  2018-05-27 10:56  编译原理--词法分析器+语法分析器 源代码\语法分析器\bin\Debug\语法分析器.exe

     文件       7974  2018-05-28 13:25  编译原理--词法分析器+语法分析器 源代码\语法分析器\main.cpp

     文件      22083  2018-05-28 13:18  编译原理--词法分析器+语法分析器 源代码\语法分析器\obj\Debug\main.o

     文件       1130  2018-05-26 20:37  编译原理--词法分析器+语法分析器 源代码\语法分析器\语法分析器.cbp

     文件        147  2018-05-27 11:08  编译原理--词法分析器+语法分析器 源代码\语法分析器\语法分析器.depend

     文件        324  2018-05-28 13:25  编译原理--词法分析器+语法分析器 源代码\语法分析器\语法分析器.layout

     目录          0  2019-01-07 21:36  编译原理--词法分析器+语法分析器 源代码\词法分析器\bin\Debug

     目录          0  2019-01-07 21:36  编译原理--词法分析器+语法分析器 源代码\词法分析器\obj\Debug

     目录          0  2019-01-07 21:36  编译原理--词法分析器+语法分析器 源代码\语法分析器\bin\Debug

     目录          0  2019-01-07 21:36  编译原理--词法分析器+语法分析器 源代码\语法分析器\obj\Debug

     目录          0  2019-01-07 21:36  编译原理--词法分析器+语法分析器 源代码\词法分析器\bin

     目录          0  2019-01-07 21:36  编译原理--词法分析器+语法分析器 源代码\词法分析器\obj

     目录          0  2019-01-07 21:36  编译原理--词法分析器+语法分析器 源代码\语法分析器\bin

     目录          0  2019-01-07 21:36  编译原理--词法分析器+语法分析器 源代码\语法分析器\obj

     目录          0  2019-01-07 21:36  编译原理--词法分析器+语法分析器 源代码\词法分析器

     目录          0  2019-01-07 21:36  编译原理--词法分析器+语法分析器 源代码\语法分析器

     目录          0  2019-01-07 21:36  编译原理--词法分析器+语法分析器 源代码

----------- ---------  ---------- -----  ----

              3020172                    26


评论

共有 条评论