📄 语法分析-main.c
字号:
#include "stdio.h"
#include "string.h"
#include "scaner.h"
void yucu(); //语句串分析程序
void statement(); //语名分析程序
void expression(); //表达式分析程序
void term(); //项分析程序
void factor(); //因子分析程序
int kk=0;
//语法分析程序
void irparser() //begin<语句串>end
{
if(syn==1) //是否以begin 开头
{
scaner();
yucu(); //是,则分析语句串
if(syn==6) //是否以end结束
{
scaner(); //找到'#'
if(syn==0&&kk==0) //若以'#'结束,则syn=0
printf("success!!!!");
}
else //语句串输入没有错,则只是end输入错误
{
if(kk!=1)
printf("\n没有'end',输入错误");
kk=1;
}
}
else //不是以begin开头
{
printf("\n没有以'begin'开头,或输入'begin'错误");
kk=1;
}
}
//语句串分析程序
void yucu() //<语句>(;<语句>)
{
statement(); //第一个语句
while(syn==26) //识别;
{
scaner();
statement(); //下一个语句
}
}
//语句分析程序
void statement() //赋值语句->标识符=表达式
{
if(syn==10) //标识符
{
scaner();
if(syn==18) //:=
{
scaner();
expression(); //表达式
}
else
{
printf("\n输入'='错误"); //:=没有输入正确
kk=1;
}
}
else
{
printf("\n语句错误");
kk=1;
}
}
//表达式分析程序
void expression() //<项>(+<项>|-<项>)
{
term(); //项首
while(syn==13||syn==14)
{
scaner();
term();
}
}
//项分析程序
void term() //<因子>(*<因子>|/<因子>)
{
factor(); //首因子
while(syn==15||syn==16) //+,-
{
scaner();
factor();
}
}
//因子分析程序
void factor() //标识符|数字|表达式
{
if(syn==10||syn==11) //标识符|数字
scaner();
else if(syn==27) //(
{
scaner();
expression();
if(syn==28) //)
scaner();
else
{
printf("\n输入')'错误");
kk=1;
}
}
else
{
printf("\n表达式错误");
kk=1;
}
}
void main()
{
p=0;
printf("\n please input string:\n");
do //从键盘接收到prog
{
ch=getchar();
prog[p++]=ch;
}while(ch!='#'); //以#结束
p=0;
scaner(); //识别第一个单词,是否为begin
irparser();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -