分享

使用ANTLR构建PowerScript语法分析器(2) | OutOfMemory

 quasiceo 2014-02-03

使用ANTLR构建PowerScript语法分析器(2)

在前篇文中写的词法分析文件存在有两个小问题:
1. 处理换行符和回车符的词法定义有重复,在WS和EndOfLine中都有出现
2. 像/* comments /* nested comments */ */这种嵌套注释会被输出成

antlr 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());
            }
        }
    ;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约