令牌冲突(??)编写ANTLR4语法

时间:2017-02-23 11:00:32

标签: antlr4 antlr4cs

我认为这是一个非常简单的语法:

  1. 我希望它允许令牌称为事实。这些令牌可以以字母开头,然后允许任何类型的这些:字母,数字,%或_
  2. 我想用两个事实来概括两个事实。但第二个事实不必以字母开头(数字,%或_也是第二个令牌有效)
  3. 整个事实中的任何“subfact”(甚至是初始的)都可以像数组一样“实例化”(你会通过阅读我的例子得到它)
  4. 例如:

    • 富%
    • Foo_12%
    • Foo.Bar
    • 富%酒吧
    • Foo.4_Bar
    • 富[42]
    • 富[ '实例'。酒吧

    我试着写这样的语法,但是我无法让它工作:

    grammar Common;
    
    /*
     * Parser Rules
     */
    fact: INITIALFACT instance? ('.' SUBFACT instance?)*;
    instance: '[' (LITERAL | NUMERIC) (',' (LITERAL | NUMERIC))* ']';
    
    /*
     * Lexer Rules
     */
    INITIALFACT: [a-zA-Z][a-zA-Z0-9%_]*;
    SUBFACT: [a-zA-Z%_]+;
    ASSIGN: ':=';
    LITERAL: ('\'' .*? '\'') | ('"' .*? '"');
    NUMERIC: ([1-9][0-9]*)?[0-9]('.'[0-9]+)?;
    
    WS: [ \t\r\n]+ -> skip;
    

    例如,如果我尝试解析Foo.Bar,我会得到:Syntax error line 1 position 4: mismatched input 'Bar' expecting SUBFACT

    我认为这是因为ANTLR首先发现Bar匹配INITIALFACT并在此处停止。我该如何解决这个问题?

    如果它相关,我使用的是Antlr4cs

0 个答案:

没有答案