栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

基于C++的递归下降语法分析设计原理与实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于C++的递归下降语法分析设计原理与实现

资源下载地址:https://download.csdn.net/download/sheziqiong/85949206
资源下载地址:https://download.csdn.net/download/sheziqiong/85949206

递归下降语法分析设计原理与实现 一、 理论传授

语法分析的设计方法和实现原理;LL(1)文法及其判定;无回朔的递归下降分析的设计与实现;

二、 目标任务

[实验项目]完成以下描述赋值语句的 LL(1)文法的递归下降分析程序

G[S]: S→V=E

E→TE′

E′→ATE′|ε

T→FT′

T′→MFT′|ε

F→ (E)|i

A→+|-

M→*|/

V→i

设计说明]

终结符号 i 为用户定义的简单变量,即标识符的定义。

设计要求

(1)输入串应是词法分析的输出二元式序列,即某算术表达式“专题 1”的输出结果,输出为输入串是否为该文法定义的算术表达式的判断结果;

(2)递归下降分析程序应能发现简单的语法错误;

(3)设计两个测试用例(尽可能完备,正确和出错),并给出测试结果;

(4)选做:如有可能,考虑如何用文法描述 C 语言的 if 语句,使整个文法仍然为 LL(1)文法,并使得你的递归下降程序可以分析赋值语句和 if 语句。

任务分析

重点解决 LL(1)文法到递归子程序框图的设计。

实验原理分析

递归下降法的主要原理是,对每个非终结符按其产生式结构构造相应语法分析子程序,其中终结符产生匹配命令,而非终结符则产生过程调用命令。因为文法递归相应子程序也递归,所以称这种方法为递归子程序下降法或递归下降法。

递归下降分析程序的实现思想是:识别程序由一组子程序组成。每个子程序对应于一个非终结符号。每一个子程序的功能是:选择正确的右部,扫描完相应的字。在右部中有非终结符号时,调用该非终结符号对应的子程序来完成。

程序功能描述

1、将二元式序列文件作为程序的输入;

2、对输入的字符串做出正确的递归下降分析判断,判断其是否是给定文法的算术表达式;

3、能发现简单的错误,例如非法字符输入和合法输入但其中某处推导中出现的语法错误等;

程序结构描述

程序的主要数据结构如下图,使用 token 存储输入的字符串,current 存当前一个字符,S 到 V 函数分别对应文法中的产生式,error1 函数用来提醒语法错误,error 函数用来提醒非法输入错误。

单词符号及其分类编码

单词符号 种别码

=1

(2

)3

+4

-5

6

/7

i8

#9

程序执行流程如下图所示:

部分子程序流程图如下:






实验结果及测试

测试用例 1:

i=i+i*i

输入二元组文件如下:

测试结果如下:

可以看到,i=i+i*i 是该文法定义的算术表达式,判断结果是正确。

测试用例 2:

i=i+i/

输入二元组文件如下:

测试结果如下:

可以看到,i=i+i/不是该文法定义的算术表达式,判断结果是错误,并且给出了推导过程中的错误之处,即 F 作为产生式左边时的推导产生了错误,为语法错误,没有未定义符号的出现。

(测试用例见附件 input1,input2)
资源下载地址:https://download.csdn.net/download/sheziqiong/85949206
资源下载地址:https://download.csdn.net/download/sheziqiong/85949206

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1009611.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号