编译原理 - 实验二 - 语法分析 - 递归下降分析器设计 - 实验报告

2019-08-31 12:21

递归下降分析器设计

一、实验/实习过程

内容:利用JavaCC生成一个MiniC的语法分析器;

要求:

1. 用流的形式读入要分析的C语言程序,或者通过命令行输入源程序。 2. 具有错误检查的能力,如果有能力可以输出错误所在的行号,并简单提示

3. 如果输入的源程序符合MiniC的语法规范,输出该程序的层次结构的语法树

具体实施步骤如下:

1.把MiniC转换为文法如下

<程序〉→ main()〈语句块〉

〈语句块〉→{〈语句串〉}

〈语句串〉→〈语句〉〈语句串〉|〈语句〉

〈语句〉→〈赋值语句〉|〈条件语句〉|〈循环语句〉 〈赋值语句〉→ ID =〈表达式〉; 〈条件语句〉→ if〈条件〉〈语句块〉 〈循环语句〉→ while〈条件〉〈语句块〉 〈条件〉→(〈表达式〉〈关系符〉〈表达式〉)

〈表达式〉→〈表达式〉〈运算符〉〈表达式〉|(〈表达式〉)|ID|NUM 〈运算符〉→+|-|*|/

〈关系符〉→<|<=|>|>=|==|!=

2.消除语句中的回溯与左递归

3.在eclipse环境下完成JavaCC的插件安装后,写一个JavaCC文法规范文件(扩

展名为jj)

4.完成的功能包括词法分析,语法分析

二、代码:

options {

JDK_VERSION = \}

PARSER_BEGIN(eg1)

public class eg1 {

public static void main(String args[]) throws ParseException { eg1 parser = new eg1(System.in); parser.start(); } }

PARSER_END(eg1) SKIP : { \| \| \| \}

TOKEN : /* OPERATORS */ {

< PLUS: \| < MINUS: \| < MULTIPLY: \| < DIVIDE: \} TOKEN : {

1

}

TOKEN: //关键字 {

TOKEN : //定义整型数 {

< INTEGER: [\| < #DIGIT: [\}

TOKEN : //数字 {

)+ | ()+\\}

TOKEN : //标记 {

TOKEN : //标识符 {

|

( | )* > |<#LETTER:[\}

2

void start():{} {

block() }

void block():{} {

string() }

void string():{} {

yuju() (string())? }

voidyuju():{} {

fuzhiyuju() | tiaojianyuju() | xunhuanyuju() }

voidfuzhiyuju():{} {

biaodashi() }

voidtiaojianyuju():{} {

tiaojian() block() }

voidxunhuanyuju():{}

3

{

tiaojian() block() }

voidtiaojian():{} {

biaodashi() guanxifu() biaodashi() }

voidbiaodashi():{} {

( biaodashi() biaodashi2()) | (biaodashi2() ) | ( biaodashi2() ) }

void biaodashi2():{} {

(yunsuanfu() biaodashi() biaodashi2() )? }

voidyunsuanfu():{} {

< PLUS > | < MINUS > | < MULTIPLY> |< DIVIDE > }

voidguanxifu() :{} {

| | | |

}

4

三、实验/实习总结

本次实习,我使用javacc完成了包括词法分析,语法分析(输出语法树),能够读文件的功能,总的来说比较满意,通过本次实习掌握了javacc基本的使用。

5


编译原理 - 实验二 - 语法分析 - 递归下降分析器设计 - 实验报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:小班游戏活动设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: