资源简介
包含编译原理实验中的语法分析源程序及实验报告,此语法分析器基于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
相关资源
- 2013集美大学编译原理部分考试题目
- 编译原理词法、语法、语义分析器
- 递归下降分析程序 很好的实验要求
- 编译原理词法分析程序代码
- 湖南农大-编译原理2010期末考试试卷
- 编译原理实验 语义分析与中间代码
- 编译原理 语法分析器
- 编译原理目标代码
- 无符号数的词法分析程序
- 编译原理实验代码四则表达式编译及
- 西安电子科技大学编译原理大作业C
- 河北工业大学编译原理实验
- 编译原理课程设计——编译器
- 递归下降分析法的实现
- 词法分析器含代码及实验报告
- 编译原理课程设计含报告,源程序和
- 语义分析实验报告 经典
- 西安电子科技大学编译原理大作业代
- 编译原理文法的预测分析法
- 哈工大编译原理实验三次合一
- 编译原理实验----词法分析、分析预测
- 编译原理课程设计+源代码
- 自顶向下的语法分析器
- 四川大学编译原理课程设计报告C-词法
- 编译原理,词法分析&语法分析及源代
- 赋值语句词法和语法分析程序
- 《编译原理》课程设计指导书 算术表
- 常州工学院编译原理试卷A
- yacc实现的语法分析器
- 语法分析器实验报告
评论
共有 条评论