Хорошо, я действительно запутался в этой ошибке.Я знаю, что в прошлом использование в качестве токена правила '/' не вызывало ошибок.Однако это просто сбивает с толку.Вот моя грамматика:
grammar LilWildC;
options {
language = Java;
}
@header
{
package com.matthewkimber.lilwildc;
}
@lexer::header
{
package com.matthewkimber.lilwildc;
}
program
: global_variables procedure+
;
global_variables
: variable_definition*
;
variable_definition
: 'number' IDENT ';'
| 'number' '[' A_NUMBER ']' IDENT ';'
;
procedure
: 'procedure' IDENT '{' block '}'
;
block
: local_variables statement+
;
local_variables
: variable_definition*
;
statement
: variable_reference '=' numeric_expression ';'
;
variable_reference
: IDENT
| IDENT '[' numeric_expression ']'
;
numeric_expression
: multiply_expression
( '+' multiply_expression
| '-' multiply_expression
)*
;
multiply_expression
: negative_factor
( '*' negative_factor
| '/' negative_factor
| '%' negative_factor
)*
;
negative_factor
: '-'? factor
;
factor
: A_NUMBER
| variable_reference
| '(' numeric_expression ')'
;
A_NUMBER: (('0'..'9')+'.'?) | (('0'..'9')*'.'('0'..'9')+) ;
IDENT: ('a'..'z' | 'A'..'Z')('a'..'z' | 'A'..'Z' | '0'..'9' | '_')* ;
WS: (' ' | '\t' | ('\r'?'\n'))+ { $channel = HIDDEN; } ;
Когда я запускаю тест по грамматике со следующим вводом:
procedure main
{
var = 10 / 1;
}
, я получаю следующее дерево анализа в плагине ANTLR eclipse:
![ANTLR Parse Tree - NoViableAltException](https://i.stack.imgur.com/LWVCR.png)
Чего я не понимаю, так это то, что умножение и по модулю работают нормально, только деление выдает эту ошибку.ANTLR пропускает прямо над '/' и не видит это как токен, или я что-то пропустил?Любая помощь с благодарностью.