antlr4没有解析明显的树

时间:2016-03-26 10:46:30

标签: parsing antlr4

我想创建一个将解析输入语句

的语法

myvar是43 + 23

myvar的其他值是"你好"

但是解析器在这里没有识别任何东西。 (对不起,我不允许发布图片:(想象一下带有令牌的语句节点 [myvar] [是] [43] [+] [23]因为孩子都被标记为红色。同样适用于其他声明)

我收到的错误消息令我感到困惑:

第2:7行输入' myvaris'

没有可行的选择

第3:19行输入' otherVarofmyvaris'

没有可行的选择

空间在哪里?我认为,这与我的词法分析器有关,但我无法看出问题所在。以防万一这是这些陈述的语法:

statement
        : envCall                   #call_Environment_Function
        | identifier IS expression  # assignment_statement // This one should be used
        | loopHeader statement_block    # loop_statement
        etc... 

expression
    : '(' expression ')'                #bracket_Expression
    | mathExpression                    #math_Expression
    | identifier                        #identifier_Expression // this one should be used
    | objectExpression                  #object_Expression
    etc ...

identifier //both of these should be used
: selector=IDENTIFIER OF object=expression #ofIdentifier
| selector=IDENTIFIER #idLocal
;

这是我到目前为止所有的Lexer规则:

IdentifierNamespace: IDENTIFIER '.' IDENTIFIER;
FromIn: FROM | IN;

OPENBLOCK: NEWLINE? '{';
CLOSEBLOCK: '}' NEWLINE;

NEWLINE: ['\n''\t']+;
NUMBER: INT | FLOAT;
INT: [0-9]+;
FLOAT: [0-9]* '.' [0-9]+;

IsAre: IS | ARE;

OF: 'of';
IS: 'is';
ARE: 'are';
DO: 'do';
FROM: 'from';
IN: 'in';
IDENTIFIER : [a-zA-Z]+ ;
//WHITESPACE: [ \t]+ -> skip;
fragment UNICODE : 'u' HEX HEX HEX HEX ;
fragment HEX : [0-9a-fA-F] ;
fragment ESC : '\\' (["\\/bfnrt] | UNICODE) ;
STRING : '"' (ESC | ~["\\])* '"' ;
END: 'END'[.]* EOF;
WHITESPACE : ( '\t' | ' ' )+ -> skip ;

1 个答案:

答案 0 :(得分:1)

好的,找到了。为解析器定义了一个compOP,它正在弄乱树生成。

compOP: '<'
  | '>'
  | '=' // the programmers '=='
  | '>='
  | '<='
  | '<>'
  | '!='
  | 'in'
  | 'not' 'in'
  | 'is' <- removed this one and it works now
  ;

所以:我猜是从不给Parser和Lexer分配相同的关键字。