使用ANTLR構(gòu)建PowerScript語法分析器(2) 在前篇文中寫的詞法分析文件存在有兩個小問題: 1. 處理換行符和回車符的詞法定義有重復(fù),在WS和EndOfLine中都有出現(xiàn) 2. 像/* comments /* nested comments */ */這種嵌套注釋會被輸出成  第一個問題比較容易解決,只要將EndOfLine前的fragment去掉,再將WS改成下面這樣就可以了。 WS
: (' '|'\t'|'\u000C') {$channel=HIDDEN;}
;
第二個問題則可以通過計數(shù)器來處理。先初始化一個計數(shù)器變量depthOfComments來標(biāo)記塊注釋的深度,當(dāng)遇到’/*’時就加一,遇到’*/’時則減一。輸出時只要判斷depthOfComments是否等于0就行了。 BLOCK_COMMENT
@init {
int depthOfComments = 0;
}
: '/*' {depthOfComments++;}
( options {greedy=false;}
: ('/' '*')=> BLOCK_COMMENT {depthOfComments++;}
| '/' ~('*')
| ~('/')
)*
'*/' {depthOfComments--;}
{
if (depthOfComments == 0) {
System.out.println("bc>" + getText());
}
}
;
|