编译原理-递归下降分析法 c程序部分的分析

时间:2023-03-09 05:18:12
编译原理-递归下降分析法 c程序部分的分析

实验三 语法分析程序实验

专业 商软2班   姓名 黄仲浩  学号 201506110166

一、 实验目的

     编制一个部分文法分析程序。

二、 实验内容和要求

输入:源程序字符串

输出:正确或者错误

三、 实验方法、步骤及结果测试

  1. 源程序名:递归下降分析.c

可执行程序名:递归下降分析.c

  1. 原理分析及流程图
#include<stdio.h>
#include<string.h>
char Token[];//存储输入的字符
char sym;//记录下一个字符
char s;//输入字符的传递
static int p= ;//下一个字符的下标
void S();
void T();
void U();
void scaner();//下一个字符
void error();//错误结束
//以此文法为基础作此程序
//S->a|^|(T)
//T->SU
//U->,SU|$
int main()
{
int i=-;
printf("Please input :\n");
do
{ scanf("%c",&s);i++;
Token[i]=s; }while(Token[i]!='#');
scaner();
S();
if(sym=='#')
printf("Success!\n");
else
printf("fail!\n");
return ; }
void scaner()
{
sym=Token[p];
p++;
}
void error()
{
printf("error!");
}
void S()
{
if(sym=='a'||sym=='^')//如果是a或者是^
scaner();
else if(sym=='(')
{
scaner();
T();
if(sym==')')
scaner();
else
error();
}
}
void T()
{
S();
U();
}
void U()
{
if(sym==',')
{
scaner();
S();
U();
}
else if(sym!=')')
error();
}
  1. 主要程序段及其解释:

     S().T().U()//只是分析c语言的部分

     scaner()//进行下一个字符的记录

     error()//结束的标志

  1. 运行结果及分析

编译原理-递归下降分析法 c程序部分的分析

四、 实验总结

此程序只是以部分为主做出来,是为了慢慢地做好全部c语言的分析。我会慢慢以此思考LL(1)文法来进行最终的文法改写分析。