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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

递归下降分析器设计

一、实验/实习过程

内容:利用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 = "1.5";

}

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 :

{

" "

| "\r"

| "\t"

| "\n"

}

TOKEN : /* OPERATORS */

{

< PLUS: "+" >

| < MINUS: "-" >

| < MULTIPLY: "*" >

| < DIVIDE: "/" >

}

TOKEN :

{

"> |

|

|

|

=" > |

TOKEN: //关键字

{

| | |

| | | }

TOKEN : //定义整型数

{

< INTEGER: ["0" - "9"]( )+ >

| < #DIGIT: ["0" - "9"] >

}

TOKEN : //数字

{

)+ | ()+"."| ()+"."()+| "."()+>

}

TOKEN : //标记

{

| | | |

| | }

TOKEN : //标识符

{

|

( | )* >

|<#LETTER:["a"-"z", "A"-"Z"]>

}

void start():{}

{

block() }

void block():{}

{

string()

}

void string():{}

{

yuju() (string())?

}

void yuju():{}

{

fuzhiyuju() | tiaojianyuju() | xunhuanyuju()

}

void fuzhiyuju():{}

{

biaodashi()

}

void tiaojianyuju():{}

{

tiaojian() block()

}

void xunhuanyuju():{}

tiaojian() block()

}

void tiaojian():{}

{

biaodashi() guanxifu() biaodashi()

}

void biaodashi():{}

{

( biaodashi() biaodashi2()) |

( biaodashi2() ) | ( biaodashi2() )

}

void biaodashi2():{}

{

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

}

void yunsuanfu():{}

{

< PLUS > | < MINUS > |

< MULTIPLY> | < DIVIDE >

}

void guanxifu() :{}

{

| |

| |

}

相关文档
最新文档