Принятие грамматики с одинарными кавычками

Мне нужно написать грамматику в antlr4, которая принимает дату и время в одинарных кавычках, а затем должна печатать то же самое, что и вывод. Например: дата/время = '2007-08-01T01:00:00,000+01:00'. Если это мой ввод, он должен быть принят как (дата или время) или как дата, так и время в грамматике, и вывод должен быть напечатан так же, как ввод, который мы дали.

ЧАСТЬ МОЕЙ ГРАММАТИКИ

predicateOperand : objectPath | operand;

operand : STRING | INTEGER | FLOAT | DATE | PARAMETER | BOOLEAN;

DATE :  '\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT
        'T' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ',' DIGIT DIGIT
        DIGIT '+' DIGIT DIGIT ':' DIGIT DIGIT '\'';

STRING :  '\'' ( ESC_SEQ | ~('\\'|'\'') )* '\''
          |'"' ( ESC_SEQ | ~('\\'|'"') )* '"';

Это часть моей грамматики. Но если я даю '2007-08-01T01:00:00,000+01:00' в качестве входных данных, он не принимается как дата, а принимается как строка.

Если кто-то поможет, что может быть так благодарен мне. Спасибо.


person user2085189    schedule 31.08.2013    source источник


Ответы (1)


В вашей грамматике нет ошибок.

Хотя ввод, которому соответствует «STRING», охватывает ввод «DATE», ввод «2007-08-01T01:00:00,000+01:00» все равно будет распознан как «DATE». «ANTLR разрешает лексические неоднозначности, сопоставляя входную строку с лексическим правилом, указанным первым в грамматике». Отношения аналогичны отношениям «КЛЮЧЕВОЕ СЛОВО» и «ИДЕНТИФИКАТОР». Вы можете обратиться к «Pragmatic.The Definitive ANTLR 4 Reference» для получения дополнительной информации.

Лексеры пытаются сопоставить максимально длинную строку для каждого токена, поэтому такой ввод '2007-08-01T01:00:00,000+01:00' будет распознан как "STRIGN".

Вы можете протестировать его на Antlr 4.

person frankli22586    schedule 02.09.2013