JavaCC详解 绝对干货

考虑到在CSDN,没有搜索到很多关于javacc的东西,绝对干货。

javacc概述


javacc概述

  JavaCC 是一个词法分析生成器和语法分析生成器。 词法分析和语法分析是处理输入字符序列的软件构件, 编译器和解释器协同词法分析和语法分析来“解密” 程序文件。


  javacc的获取https://java.net/projects/javacc/downloads从此处下载了javacc 5.0 然后解压并在path环境变量中添加 解压后的bin目录即可。


词法分析器可以将字符串解析为一个一
个的标识符(Token), 并且可以把这些标识符归类。 看一段 C 语言代码:  

int main() {
    return 0 ;
}

经过C语言的词法分析会将代码分为如下的一些标识符

“int” , “ ” , “main” , “(” , “ )” ,“ ” , “{
   ” , “ \n” ,“ \t” ,
“return” “ ” , “0” , “ ” , “;” , “ \n” ,“ }” , “ \n” , “ ” 

还会进行分类,C语言的词法分析器会将其分为如下:

KWINT, SPACE, ID, OPAR, CPAR,
SPACE, OBRACE, SPACE, SPACE, KWRETURN,
SPACE, OCTALCONST, SPACE, SEMICOLON, SPACE,
CBRACE, SPACE, EOF

EOF代表文件的结束。经过词法分析,将这些标识符传给语法分析器。在C语言中 SPACE(空格) 是不需要的。
语法分析器将生成语法树:
这里写图片描述


javacc的特性


javacc有几个重要的特性需要记住的:

  • 使用递归下降语法解析,LL(k)。其中,第一个L表示从左到右扫描输入;第二个L表示每次都进行最左推导(在推导语法树的过程中每次都替换句型中最左的非终结符为终结符。类似还有最右推导);k表示的是每次向前探索(lookahead)k个终结符

  • 词法规则,语法规则定义在同一文件中,就是.jj文件。

  • jjTree可以帮助更好的语法分析(因为好像没用过,不好说啊)

  • 可定制生成的行为,如对字母的大小写是否敏感。不如设计数据库sql语句的时候应该使用关键字大小写不敏感。

  • 更向前一步解决移进规约。当文法本身存在二义性的时候有时候通过设置lookahead为k能解决问题,带来的问题就是增加编译时间,所以最好的方法是修改二义性文法为无二义性文法。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值