Моя простая грамматика ANTLR не работает, как ожидалось

Я новичок в ANTLR и после прочтения руководства и различных форумов пытаюсь написать простую грамматику ANTLR, которая допускает такие выражения, как "(A и B)" или "(C и D)" или "((A и B) или (А и С)) "и ничего более. (Никаких специальных символов, кроме паренов, никаких операторов, кроме AND и OR, все переменные должны быть одной буквой между "A" и "Z".)

Тем не менее, моя простая грамматика (ниже) позволяет: а) специальные символы (они игнорируются, когда они должны вызывать ошибки); б) переменные, длина которых превышает один символ (при условии, что они начинаются с A по Z - в этом случае они обрабатываются в качестве единственной символьной переменной в результирующем дереве) в) числовые значения (например, 123) .. они просто игнорируются, кстати.

Итак, почему моя простая грамматика не работает?

grammar QvidianPlaybooks; 
options{ language=CSharp2; output=AST; ASTLabelType = CommonTree; } 

@lexer::members {
  public List<System.String> errors = new List<System.String>();
}

public parse
  :  expression
  ;

LPAREN : '(' ;

RPAREN : ')' ;

ANDOR : 'AND'|'and'|'OR'|'or';
NAME : ('A'|'B'|'C'|'D'|'E'|'F'|'G'|'H'|'I'|'J'|'K'|'L'|'M'|'N'|'O'|'P'|'Q'|'R'|'S'|'T'|'U'|'V'|'W'|'X'|'Y'|'Z'); 
WS : ' ' { $channel = Hidden; };

// ***************** parser rules:
expression : anexpression EOF!;
anexpression : atom (ANDOR^ atom)*;
atom : NAME | LPAREN! anexpression RPAREN!;

Спасибо за помощь.

0 ответов

Другие вопросы по тегам