使用 antlr4 和 java 解析器解析 objective-c 代码时出错,但适用于 grun

Error parsing objective-c code with antlr4 and java parser, but works with grun

我正在使用一步语法 here 当我 运行 g运行:

时效果很好

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

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

        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}

您 运行 使用解析器规则 translationUnit grun,但在您的代码中使用 expression。改为这样做:

ParseTree tree = parser.translationUnit();