使用antlr输入文件生成java代码

问题描述 投票:0回答:0

使用

*.g
antlr
文件描述的源请求规则。

我正在尝试使用 antlr4 生成 java 代码并收到如下错误:

error(50): mql2.g4:9:7: syntax error: mismatched input ';' expecting RBRACE
error(50): mql2.g4:10:6: syntax error: mismatched input ';' expecting COLON while matching a lexer rule
error(50): mql2.g4:11:11: syntax error: mismatched input ';' expecting COLON while matching a lexer rule
error(50): mql2.g4:12:10: syntax error: mismatched input ';' expecting COLON while matching a lexer rule
error(50): mql2.g4:16:16: syntax error: '{package com.proquest.mql.queryTranslator;}' came as a complete surprise to me while matching rule preamble
error(50): mql2.g4:17:1: syntax error: 'lexer' came as a complete surprise to me while looking for an identifier
error(50): mql2.g4:19:11: syntax error: '^' came as a complete surprise to me
error(50): mql2.g4:19:16: syntax error: '!' came as a complete surprise to me
...

输入文件示例是

grammar mql2;

options {
    output=AST;
    k=2;
}

tokens {
    AND_OP;
    OR_OP;
    FIELD_CODE;
    FC_SUFFIX;
    }


@parser::header {package com.company.mql.queryTranslator;}
@lexer::header {package com.company.mql.queryTranslator;}

parse   : mql^ EOF!
    ;

mql : WS!* mqlx WS!* ( and_or^ WS! mqlx WS!*)*;

and_or
    : and_operator
    | or_operator
    ;

mqlx : search_item
     | LPAREN! mql^ RPAREN!
     | field_code field_phrase RPAREN -> ^(FIELD_CODE field_code field_phrase)
     | field_code_prefix field_code_suffix ->^(FIELD_CODE field_code_prefix field_code_suffix)
     ;

field_code
    : w=WORD^ LPAREN!
    ;

field_phrase
    : (WS!* (WORD|PHRASE|AND|OR))+
    ;

field_code_prefix
    : WORD^ '.'!;

field_code_suffix
    : field_code  (WORD|PHRASE) RPAREN!;

and_operator
    : AND->AND_OP | (/*empty*/->AND_OP) ;

or_operator
    : OR->OR_OP;

search_item
        :  NOT^ WS!* mqlx
    |  (WORD|PHRASE);

LPAREN : '(';

RPAREN : ')';

AND : ('a'|'A')('n'|'N')('d'|'D');

NOT : ('n'|'N')('o'|'O')('t'|'T');

OR : ('o'|'O')('r'|'R');

fragment
DIGIT  : ('0'..'9') ;

fragment
LETTER  : ('a'..'z' | 'A'..'Z'| 'á'| '*' | '&' | '-' | '.' | ',' | '?' | '!' | '/' | '\u0080'..'\ufffe');

SPECIAL_CHAR : ('\'' | '&');

WORD    : (LETTER|DIGIT|SPECIAL_CHAR)+;

WS : ( '\t' | ' ' | '\r' | '\n' | '|')+ /*{ $channel = HIDDEN; }*/;

fragment
QUOTE :   '"' ;

PHRASE  :   QUOTE (options {greedy=false;} : . )* QUOTE ;

所以问题是:

  • 文件应该支持哪个版本的antlr? (我开始阅读
    antlr4
    参考资料,并继续阅读
    antlr3
    他们的汇合但尚未意识到当前版本)
  • 如何修复像
    antlr4
    syntax error: '^' came as a complete surprise to me
    这样的
    syntax error: '!' came as a complete surprise to me
    错误?
antlr antlr4
© www.soinside.com 2019 - 2024. All rights reserved.