语法分析——简单判断条件语句,赋值语句,循环语句

该博客介绍了如何使用递归下降分析法处理一个简单的编程语言,包括赋值语句、条件语句和循环语句的语法分析。通过示例说明了错误处理和函数设计,如getsym()、block()和statement()等,并提供了实验截图展示正确和错误的输入输出情况。
摘要由CSDN通过智能技术生成

语法分析小程序。简单判断赋值、条件、循环,代码块开始,结束

二、     实验要求

1.待分析的简单语言的语法

用扩充的EBNF表示如下:

<程序块>::= begin<语句>{;<语句>} end.

<语句>::= <赋值语句>|<条件语句>|<循环语句>

<赋值语句>::= IDENT:=<表达式>

<条件语句>::= if <条件>then <语句>

<循环语句>::= while <条件> do <语句>

<表达式>::= [+|-]<项>{(+|-)<项>}

<项>::= <因子>{(*|/)<因子>}

<因子>::= IDENT | NUMBER |‘(’<表达式>‘)’

<条件>::= <表达式><关系运算符><表达式>

<关系运算符>::= <>|=|<|<=|>|>=

 

2. 实验要求说明

输入单词串,以“.”结束,如果是文法正确的句子,则输出成功信息,否则输出失败信息,指出错误原因。需要系统地规划错误码。 例如:

输入  begina:=2*3 end.

输出  syntaxparses success!

输入  beginx=4 end.

输出  Error 11: 没有检测到赋值语句的:=符号

输入 beginx:=2;while x>0 do if x/2=0 then x:=(x/2) end.

输出  syntaxparses success!

 

3. 语法分析设计说明

采用递归下降分析程序。为每个非终结符编写一个子过程。


设计思路

1.变量说明

line    从终端读入的字符串;    

p       当前所指位置在计数器,

ch      字符为

token   正在识别的单词字符串;

m       当前所指位置在计数器

  num     整型常数

sym     每个单词符号种类

word    保留字表

Err     错误类型标记

flag    出错标记

 

 2.函数说明

    void getsym();              //判断输入字符类型

int block();                //程序快分析函数

void error(int i);          //出错处理函数

void statement();           //语句处理函数

void expression();          //表达式处理函数

void term();                //项处理函数

void factor();              //因子处理函数

void condition();           //条件处理函数

void Relational_operator(); //表达式处理函数

void printSym(int i)        //打印输入字符的类型

接下来举例说明几个重要函数

1).getsym()函数示意图


2).main()函数示意图


3)block()函数示意图


3).error()函数示意图

错误序号

出错原因

1

没有检测到语句期望begin符号

2

没有检测到赋值语句的 := 符号

3

没有检测到条件语句的 then 符号

4

没有检测到循环语句的 do 符号

5

错误的句子!

6

你写了数字!

7

没有检测到 '(' 的 ')' 符号

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值