首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用antlr4和java解析器解析目标c代码,但与grun一起使用

使用antlr4和java解析器解析目标c代码,但与grun一起使用
EN

Stack Overflow用户
提问于 2018-04-09 20:52:34
回答 1查看 103关注 0票数 0

我使用的是一步语法这里,运行grun时效果很好:

grun ObjectiveC translationUnit ~/Desktop/test.h -gui

但是,在使用生成的java解析器运行以下代码时:

代码语言:javascript
复制
        try {
            ANTLRInputStream inputStream = new ANTLRInputStream(
                    "@interface TestInterface \r @property(nonatomic, assign) BOOL testProp; \r @end");

            ObjectiveCLexer lexer = new ObjectiveCLexer(inputStream);
            CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
            ObjectiveCParser parser = new ObjectiveCParser(commonTokenStream);
            parser.setBuildParseTree(true);
            ParseTree tree = parser.expression();

            ObjectiveCParserBaseVisitor visitor = new ObjectiveCParserBaseVisitor();
            visitor.visit(tree);
        }
        catch(Exception ex){
            System.out.print(ex);
        }

我知道这个错误:

line 1:0 extraneous input '@interface' expecting {'sizeof', 'true', 'false', 'BOOL', 'Class', 'bycopy', 'byref', 'id', 'IMP', 'in', 'inout', 'nil', 'NO', 'NULL', 'oneway', 'out', 'Protocol', 'SEL', 'self', 'super', 'YES', '@encode', '@protocol', '@selector', 'atomic', 'nonatomic', 'retain', '__autoreleasing', '__block', '__bridge_retained', '__bridge_transfer', '__covariant', '__contravariant', '__deprecated', '__kindof', '__unused', NULL_UNSPECIFIED, NULLABLE, NONNULL, 'null_resettable', 'NS_INLINE', 'NS_ENUM', 'NS_OPTIONS', 'assign', 'copy', 'getter', 'setter', 'strong', 'readonly', 'readwrite', 'weak', 'unsafe_unretained', 'IBOutlet', 'IBOutletCollection', 'IBInspectable', 'IB_DESIGNABLE', IDENTIFIER, LP, '[', '@', BANG, '~', '++', '--', '+', '-', '*', '&', '^', CHARACTER_LITERAL, STRING_START, HEX_LITERAL, OCTAL_LITERAL, BINARY_LITERAL, DECIMAL_LITERAL, FLOATING_POINT_LITERAL}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-09 21:16:46

使用解析器规则translationUnit运行grun,但是在代码中使用expression。取而代之的是这样做:

代码语言:javascript
复制
ParseTree tree = parser.translationUnit();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49741517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档