使用ANTLR构建PowerScript语法分析器(2) 在前篇文中写的词法分析文件存在有两个小问题: 1. 处理换行符和回车符的词法定义有重复,在WS和EndOfLine中都有出现 2. 像/* comments /* nested comments */ */这种嵌套注释会被输出成  第一个问题比较容易解决,只要将EndOfLine前的fragment去掉,再将WS改成下面这样就可以了。 WS
: (' '|'\t'|'\u000C') {$channel=HIDDEN;}
;
第二个问题则可以通过计数器来处理。先初始化一个计数器变量depthOfComments来标记块注释的深度,当遇到’/*’时就加一,遇到’*/’时则减一。输出时只要判断depthOfComments是否等于0就行了。 BLOCK_COMMENT
@init {
int depthOfComments = 0;
}
: '/*' {depthOfComments++;}
( options {greedy=false;}
: ('/' '*')=> BLOCK_COMMENT {depthOfComments++;}
| '/' ~('*')
| ~('/')
)*
'*/' {depthOfComments--;}
{
if (depthOfComments == 0) {
System.out.println("bc>" + getText());
}
}
;
|