资源简介
编译原理实验 语法分析器的程序,是采用的算符优先文法,是大三时候写的,很全,里面包括源程序 和实验报告等。
代码片段和文件信息
#include
#include
#include
#include
#define SIZE 128
char priority[7][7]; //算符优先关系数组
char input[SIZE]; //存放输入的要进行分析的句子
char remain[SIZE]; //存放剩余串
char AnalyseStack[SIZE]; //分析栈
void analyse();
int testchar(char x); //判断字符X在算符优先关系表中的位置
void remainString(); //移进时处理剩余字符串,即去掉剩余字符串第一个字符
int k;
void init()
{
priority[0][0]=‘>‘;
priority[0][1]=‘<‘;
priority[0][2]=‘<‘;
priority[0][3]=‘<‘;
priority[0][4]=‘<‘;
priority[0][5]=‘>‘;
priority[0][6]=‘>‘;
priority[1][0]=‘>‘;
priority[1][1]=‘>‘;
priority[1][2]=‘<‘;
priority[1][3]=‘<‘;
priority[1][4]=‘<‘;
priority[1][5]=‘>‘;
priority[1][6]=‘>‘;
priority[2][0]=‘>‘;
priority[2][1]=‘>‘;
priority[2][2]=‘<‘;
priority[2][3]=‘<‘;
priority[2][4]=‘<‘;
priority[2][5]=‘>‘;
priority[2][6]=‘>‘;
priority[3][0]=‘>‘;
priority[3][1]=‘>‘;
priority[3][2]=‘>‘;
priority[3][3]=‘$‘;//无优先关系的用$表示
priority[3][4]=‘$‘;
priority[3][5]=‘>‘;
priority[3][6]=‘>‘;
priority[4][0]=‘<‘;
priority[4][1]=‘<‘;
priority[4][2]=‘<‘;
priority[4][3]=‘<‘;
priority[4][4]=‘<‘;
priority[4][5]=‘=‘;
priority[4][6]=‘$‘;
priority[5][0]=‘>‘;
priority[5][1]=‘>‘;
priority[5][2]=‘>‘;
priority[5][3]=‘$‘;
priority[5][4]=‘$‘;
priority[5][5]=‘>‘;
priority[5][6]=‘>‘;
priority[6][0]=‘<‘;
priority[6][1]=‘<‘;
priority[6][2]=‘<‘;
priority[6][3]=‘<‘;
priority[6][4]=‘<‘;
priority[6][5]=‘$‘;
priority[6][6]=‘=‘;
}
void analyse()
{
int ijfzz1nn1z2n2;
int count=0;//操作的步骤数
char a; //存放正在分析的字符
char pQp1p2;
f=strlen(input); //测出数组的长度
for(i=0;i<=f;i++)
{
a=input[i];
if(i==0)
remainString();
if(AnalyseStack[k]==‘+‘||AnalyseStack[k]==‘*‘||AnalyseStack[k]==‘^‘||AnalyseStack[k]==‘i‘||AnalyseStack[k]==‘(‘||AnalyseStack[k]==‘)‘||AnalyseStack[k]==‘#‘)
j=k;
else
j=k-1;
z=testchar(AnalyseStack[j]);//从优先关系表中查出s[j]和a的优先关系
if(a==‘+‘||a==‘*‘||a==‘^‘||a==‘i‘||a==‘(‘||a==‘)‘||a==‘#‘)
n=testchar(a);
else //如果句子含有不是终结符集合里的其它字符,不合法
{
printf(“错误!该句子不是该文法的合法句子!\n“);
break;
}
p=priority[z][n];
if(p==‘$‘)
{
printf(“错误!该句子不是该文法的合法句子!\n“);
return;
}
if(p==‘>‘)
{
loop: Q=AnalyseStack[j];
if(AnalyseStack[j-1]==‘+‘||AnalyseStack[j-1]==‘*‘||AnalyseStack[j-1]==‘^‘||AnalyseStack[j-1]==‘i‘||AnalyseStack[j-1]==‘(‘||AnalyseStack[j-1]==‘)‘||AnalyseStack[j-1]==‘#‘)
j=j-1;
else
j=j-2;
z1=testchar(AnalyseStack[j]);
n1=testchar(Q);
p1=priority[z1][n1];
if(p1==‘<‘) //AnalyseStack[j+1]~AnalyseStack[k]归约为N
{
count++;
printf(“(%d) %s\t%10c\t%5c%17s\t 归约\n“countAnalyseStackparemain);
k=j+1;
i--;
AnalyseStack[k]=‘N‘;
int rr1;
r=strlen(AnalyseStack);
for(r1=k+1;r1 AnalyseStack[r1]=‘\0‘;
}
else
goto loop;
}
else
{
if(p==‘<‘) //移进
{
//remainString();
count++;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 540 2008-12-22 12:52 1926219语法分析\1926219_语法分析.dsw
文件 41984 2008-12-23 23:18 1926219语法分析\1926219_语法分析.ncb
文件 5560 2008-12-25 23:38 1926219语法分析\1926219_语法分析.cpp
文件 929 2008-12-22 23:20 1926219语法分析\1926219_语法分析.plg
文件 4406 2008-12-22 13:33 1926219语法分析\1926219_语法分析.dsp
文件 73216 2008-12-23 23:16 1926219语法分析\1926219_语法分析_设计报告.doc
文件 40448 2008-12-22 13:12 1926219语法分析\1926219_语法分析_使用说明.doc
文件 53760 2008-12-23 23:18 1926219语法分析\1926219_语法分析.opt
文件 61440 2008-12-22 12:52 1926219语法分析\Debug\vc60.pdb
文件 16618 2008-12-22 23:20 1926219语法分析\Debug\1926219_语法分析.obj
文件 217165 2008-12-22 23:20 1926219语法分析\Debug\1926219_语法分析.exe
文件 418816 2008-12-22 12:52 1926219语法分析\Debug\1926219_语法分析.pdb
文件 45056 2010-03-05 10:45 1926219语法分析\1926219_语法分析_测评报告.doc
目录 0 2010-03-05 10:44 1926219语法分析\Debug
目录 0 2010-03-05 10:44 1926219语法分析
----------- --------- ---------- ----- ----
979938 15
相关资源
- 算符优先分析算法的设计与实现 编译
- 赋值语句语法分析
- 编译原理课设——算符优先分析程序
- 编译原理课程设计计软张芃教小子集
- 实验二 实现一门语言的词法分析器
- 编译原理课程设计报告_算符优先分析
- 编译原理 语法分析、语义分析综合实
- 编译原理SLR1分析
- 哈工大软件学院编译原理语法分析源
- 基于Pascal语言的语法分析器
- 2013集美大学编译原理部分考试题目
- 词法分析、语法分析、语义分析
- 编译原理词法、语法、语义分析器
- 词法分析语法分析语义分析
- 算术表达式的语法分析及语义分析程
- 编译原理词法分析程序代码
- 湖南农大-编译原理2010期末考试试卷
- 编译原理实验 语义分析与中间代码
- 编译原理 语法分析器
- 编译原理目标代码
- 无符号数的词法分析程序
- 编译原理实验代码四则表达式编译及
- 西安电子科技大学编译原理大作业C
- 河北工业大学编译原理实验
- 编译原理课程设计——编译器
- 递归下降分析法的实现
- 词法分析器含代码及实验报告
- 编译原理课程设计含报告,源程序和
- 语义分析实验报告 经典
- 西安电子科技大学编译原理大作业代
评论
共有 条评论