资源简介
包含编译原理实验中的语法分析源程序及实验报告,此语法分析器基于pascal语言,在实验报告中有详细的说明,该语法分析器只能说是小语言语法分析器,文法并不齐全,供大家参考

代码片段和文件信息
#include
#include
#include
using namespace std;
int iderror=0;
char ch=0;
char c;
int s[100]={0};
int n[100]={0};//记录行
int i=0j=0h=1;//h表示行
string w=““;
string word=““;
ifstream infile(“c:\\users\\jda\\desktop\\a.txt“ios::in);
int judge(char d)
{int flag=0;
if(d>=48&&d<=57)//数字
flag=1;
else if((d>=65&&d<=90)||(d>=97&&d<=122))//字母
flag=2;
else if(d==‘ ‘||d==‘\n‘)
flag=3;
else flag=4;
return flag;
}
void digit()
{
word=word+ch;
c=infile.get();
if(judge(c)==1) {ch=c;digit();}
else if(judge(c)==2) cout<<“error!“< else
{id=2;i++;s[i]=id;n[i]=h;
word=““;
w=w+c;
void scan();scan();
}
}
void letter()
{
word=word+ch;
c=infile.get();
if(judge(c)==1||judge(c)==2)
{ch=c;letter();}
else {if(word==“if“ || word==“else“ || word==“then“ || word==“begin“ || word==“end“ || word==“while“||word==“do“||word==“program“||word==“var“||word==“integer“||word==“char“||word==“boolean“||word==“real“||word==“and“||word==“or“||word==“not“)
{if(word==“if“)id=11;
else if(word==“else“)id=12;
else if(word==“then“)id=13;
else if(word==“while“)id=14;
else if(word==“do“)id=15;
else if(word==“begin“)id=16;
else if(word==“end“)id=17;
else if(word==“program“)id=18;
else if(word==“var“)id=19;
else if(word==“integer“)id=20;
else if(word==“char“)id=21;
else if(word==“boolean“)id=22;
else if(word==“real“)id=23;
else if(word==“and“)id=43;
else if(word==“or“)id=44;
else if(word==“not“)id=45;
word=““;i++;s[i]=id;n[i]=h;
w=w+c;
void scan();scan();
}
else {id=1;word=““;i++;s[i]=id;n[i]=h;
w=w+c;void scan();scan();
}
}
}
void yuns()
{
word=word+ch;
c=infile.get();
if(c==‘=‘)
{word=word+c;
if(word==“>=“)id=34;
else if(word==“:=“)id=32;
word=““;i++;s[i]=id;n[i]=h;void scan();scan();}
else{if(word==“>“)id=29;
else if(word==“:“)id=41;
word=““;i++;s[i]=id;n[i]=h;
w=w+c;void scan();scan();
}
}
void yuns1()
{word=word+ch;
c=infile.get();
if(c==‘=‘||c==‘>‘)
{word=word+c;
if(word==“<=“)id=33;
else if(word==“<>“)id=30;
word=““;i++;s[i]=id;n[i]=h;void scan();scan();}
else{id=28;word=““;i++;s[i]=id;n[i]=h;
w=w+c;void scan();scan();}
}
void scan()
{if(w!=““)
{ch=c;w=““;}
else
ch=infile.get();
while(ch==‘ ‘||ch==‘\n‘)
{if(ch==‘\n‘)h++;
ch=infile.get();}
if(judge(ch)==1)//数字
digit();
else if(judge(ch)==2) //字母
letter();
else if(ch==‘+‘||ch==‘-‘||ch==‘*‘||ch==‘/‘||ch==‘=‘)
{ switch(ch)
{case ‘+‘:id=24;break;
case ‘-‘:id=25;break;
case ‘*‘:id=26;break;
case ‘=‘:id=31;break;
case ‘/‘
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 9750 2009-11-21 21:33 语法分析.cpp
文件 1301504 2009-12-13 10:14 语法分析.doc
----------- --------- ---------- ----- ----
1311254 2
相关资源
- 微软masm汇编编译器
- 编译原理实验工具及参考源码(lex&
- 类pascal语言编译器(编译原理实验)
- 编译原理课程设计:词法语法编译器
- 递归下降分析器分析普通的四则运算
- 中科院 编译原理 习题及解答
- 编译原理四元式和逆波兰式
- unity3d反编译工具
- 汇编语言编译器masm5.0
- 《编译原理》清华大学版中的pl0扩充
- PL/0功能扩充break功能
- 编译词法分析器识别关键字常数和符
- uCOS编译环境建立 BC45 TASM
- zlib 最新 1.2.8 win32 win64 编译好的dll
- 编译原理LR(0)语法分析
- 编译原理中间代码生成程序
- 编译原理:LR分析程序
- C编译器源代码(超级牛b).rar
- Delphi反编译工具的源码
- 小程序反编译文件wxappUnpacker.rar
- win10 64位下编译的opencv4.5.5库,opencv
- 易语言模块反编译助手
- librdkafka win7 64位 vs2015编译Release版本
- 编译原理实验:词法分析,语法分析
- 吉林大学编译原理课件
- delphi 反编译工具 源码
- 编译好的json_lib.lib 包含64位,32位,头
- frcc.exe fastreport编译中文没乱码
- 编译原理龙书答案
- 编译原理 第三章课后习题答案
评论
共有 条评论