资源简介
需要实现的语法分析程序的功能是,接受一个表达式,分析该表达式,并根据输入正确与否给出相应信息。测试时,如果输入的表达式分析正确,则输出表示分析正确的信息;否则,输出表示分析错误的信息。
代码片段和文件信息
#include
#include //用于exit的头文件
#include
#include
#include
void expr();//E对应的递归子程序的声明
void exprrest();//E1对应的递归子程序的声明
void term();//T对应的递归子程序的声明
void termrest();//T1对应的递归子程序的声明
void factor();//F对应的递归子程序的声明
void Error();//出错处理函数的声明
void gettoken();//词法分析函数gettoken()的声明
char ch = ‘ ‘;//用来装当前输入对应的字符
int i=0;//数组位置变量置0
char strToken[30]={“ “};//用来装数字串的数组
FILE *in=fopen( “input.txt“ “r“ );//建立文件指针并打开文件
//将字符串置成空串函数
void Retract(char str[30])
{
for(int j=0;j<30;j++)
{
str[j]=0;//将数组内的数值全部重置
}
}
//词法分析函数
void gettoken()
{
ch=fgetc(in);//读入一个字符
if(isspace(ch))//判断是否为空格
{
while(1)
{
if(isspace(ch)){ch=fgetc(in);}//如果是空格则指针一直下移
else break;//直到第一个不为空格的为止,跳出本次循环
}
}
if(isdigit(ch))//判断是否是数字
{
while(1)
{
if(isdigit(ch))
{
strToken[i]=ch;//将后个数字放入前一下数字之后
i++;//数组中空位置后移
ch=fgetc(in);//读入下一个字符
}
else
{
printf(“%s“strToken);//输出数字串
i=0;//将空位置重新计数
Retract(strToken);//将数组重新开始置起
fseek(in-21);//将指针的位置在当前位置的基础上向前移2个字符
ch=fgetc(in);//读入当前字符
break;//跳出循环
}
}
}
else
{
if(ch==‘+‘){printf(“+“);}//当前是符号+的处理
else if(ch==‘-‘){printf(“-“);}//当前是符号-的处理
else if(ch==‘*‘){printf(“*“);}//当前是符号*的处理
else if(ch==‘
- 上一篇:LL(1)分析表的构造以及语句分析
- 下一篇:C语言及其在工业控制系统中的应用
相关资源
- 语法分析c语言实现程序代码+实验报告
- 实现语法分析器-编译原理
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 语法分析器 tiny语言语法分析
- C++语法分析器
- 语法分析c语言实现含报告
- LL1语法分析器(c++)
- 编译原理课程设计----语法分析器(
- 编译原理课程实验报告词法分析器及
- PL0编译器词法检查与语法分析器
- LL(1)语法分析器C++版
- 编译技术实验(Pascal代码转汇编语言
- LR(0)语法分析器程序
- TINY扩充语言的语法分析(实现 while、
- 编译原理课程设计词法语法分析器
- 编译原理LL1语法分析器C++版源代码
- 第四次上机作业 语法分析2
- 对于任意给定的输入串词法记号流进
- 编译原理课程设计LR(0)语法分析器
- LL1语法分析程序设计
- LEX与YACC实现C语言词法分析和语法分析
- 编译原理实验语法分析器
- PL/0语法分析程序
- cminus语法分析器源代码完整版
- 语法分析C实现
- 编译原理--语法分析 实验 C++版
- LL(1)文法自动生成语法分析程序的
- c语言写的编译器
- 编译原理课程设计+报告用高级语言
- 编译原理SLR(1)语法分析实验报告
评论
共有 条评论