Antlr 中 C# 的可能生成错误?

Possible generation bug for C# in Antlr?

使用 Antlr 4.3 和这个语法

http://www.harward.us/~nharward/antlr/OracleNetServicesV3.g

生成以下 *Lexer.cs C# 代码:

private void WHITESPACE_action(RuleContext _localctx, int actionIndex) {
    switch (actionIndex) {
    case 1: skip(); break;
    }
}

private void NEWLINE_action(RuleContext _localctx, int actionIndex) {
    switch (actionIndex) {
    case 2: skip(); break;
    }
}
private void COMMENT_action(RuleContext _localctx, int actionIndex) {
    switch (actionIndex) {
    case 0: skip(); break;
    }
}

但是运行时方法skip()定义为:

public virtual void Skip()

当然会出现编译错误。

Antlr 3.5.2 也生成了相同的 skip() 方法。

这是一个错误还是我做错了什么?

正如我评论中所写,这是因为语法文件中的 skip() 是 Java 依赖项。

所以 Antlr 没有 错误。 :)

您可以使用以下命令轻松地使此 v4 兼容且独立于语言

-> channel(HIDDEN)

这是实现此更改的更新语法

configuration_file
: ( parameter )*
;

parameter
: keyword EQUALS ( value
                 | LEFT_PAREN value_list RIGHT_PAREN
                 | ( LEFT_PAREN parameter RIGHT_PAREN )+
                 )
;

keyword
: WORD
;

value
: WORD
| QUOTED_STRING
;

value_list
: value ( COMMA value )*
;

QUOTED_STRING
    : SINGLE_QUOTE  ~'\''* SINGLE_QUOTE
    | DOUBLE_QUOTE  ~'"'*  DOUBLE_QUOTE
    ;

WORD
    : ( 'A' .. 'Z'
      | 'a' .. 'z'
      | '0' .. '9'
      | '<'
      | '>'
      | '/'
      | '.'
      | ':'
      | ';'
      | '-'
      | '_'
      | '$'
      | '+'
      | '*'
      | '&'
      | '!'
      | '%'
      | '?'
      | '@'
      | '\' .
      )+
    ;

LEFT_PAREN
    : '('
    ;

RIGHT_PAREN
    : ')'
    ;

EQUALS
    : '='
    ;

COMMA
    : ','
    ;

SINGLE_QUOTE
    : '\''
    ;

DOUBLE_QUOTE
    : '"'
    ;

COMMENT
    : '#' ( ~( '\n' ) )* -> channel(HIDDEN)
    ;

WHITESPACE
    : ( '\t'
      | ' '
      )  -> channel(HIDDEN)
    ;

NEWLINE
    : ( '\r' )? '\n'  -> channel(HIDDEN)
    ;