ANTLR4 语法问题



我在ANTLR4中有以下语法

grammar DEF;
def
:
    'DEF' vartypes ID ';'
;
ID
:
    (
        'A' .. 'Z'|'a'..'z'
    )+
;
vartypes
:
    INT
    | REAL
;
INT:'INT';
REAL:'REAL';
VARIABLE
:
    (
        'A' .. 'Z'
        | 'a' .. 'z'
        | '0' .. '9'
        | '_'
        | '-'
    )+
;
fragment VARTYPEREAL
:
    'REAL'
;
fragment VARTYPEINT
:
    'INT'
;
LINENUMBER
:
    'N' INTVALUE
;
INTVALUE
:
    (
        '-'
    )?
    (
        '0' .. '9'
    )+
;
WS
:
    (
        ' '
        | 't'
        | 'n'
        | 'r'
    )+ -> skip
;

当我解析字符串"DEF REAL test"时;我收到以下错误:

line 1:4 missing {'INT', 'REAL'} at 'REAL'

第 1:9 行无关的输入"测试"期望";"

但是,当我将语法更改为

grammar DEF;
def
:
    'DEF' vartypes ID ';'
;
ID
:
    (
        'A' .. 'Z'|'a'..'z'
    )+
;
vartypes
:
    'INT'
    | 'REAL'
;
VARIABLE
:
    (
        'A' .. 'Z'
        | 'a' .. 'z'
        | '0' .. '9'
        | '_'
        | '-'
    )+
;
fragment VARTYPEREAL
:
    'REAL'
;
fragment VARTYPEINT
:
    'INT'
;
LINENUMBER
:
    'N' INTVALUE
;
INTVALUE
:
    (
        '-'
    )?
    (
        '0' .. '9'
    )+
;
WS
:
    (
        ' '
        | 't'
        | 'n'
        | 'r'
    )+ -> skip
;

一切都很好。我在语法 1 中错在哪里?

在你的

第一个语法中,INTREAL规则在ID之后,所以字符串"INT"和"REAL"与ID规则匹配。在第二个语法中,你改用字符串,它(在混合语法中)创建优先于显式规则的隐式词法分析器规则。

要修复第一个语法,请将INTREAL移到规则之上ID

相关内容

  • 没有找到相关文章

最新更新