使用 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();
我正在使用一步语法 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();