编译原理_实验二_语法分析_递归下降分析器设计_实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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():{}
{
void block():{}
{
}
void string():{}
{
yuju() (string())?
}
void yuju():{}
{
fuzhiyuju() | tiaojianyuju() | xunhuanyuju()
}
void fuzhiyuju():{}
{
}
void tiaojianyuju():{}
{
}
void xunhuanyuju():{}
}
void tiaojian():{}
{
}
void biaodashi():{}
{
(
(
}
void biaodashi2():{}
{
(yunsuanfu() biaodashi() biaodashi2() )?
}
void yunsuanfu():{}
{
< PLUS > | < MINUS > |
< MULTIPLY> | < DIVIDE >
}
void guanxifu() :{}
{
}