Эй У меня быстрый вопрос. Я использую ANTLRworks для создания интерпретатора в Java из набора грамматик. Я собирался написать это вручную, но потом понял, что мне не нужно из-за antlrworks. Я получаю эту ошибку, хотяANTLRworks, создающий интерпретатор из грамматики
T.g: 9: 23: этикетки конфликтов ID с маркером с таким же именем
ли ANTLRworks путь идти при создании переводчика с грамматикой. И действительно ли вы видите ошибку в моем коде?
Я пытаюсь сделать ID одной буквы от a-z и не чувствителен к регистру. и иметь пустое пространство между каждой лексемой. СПАСИБО
grammar T;
programs : ID WS compound_statement;
statement:
if_statement|assignment_statement|while_statement|print_statement|compound_statement;
compound_statement: 'begin' statement_list 'end';
statement_list: statement|statement WS statement_list;
if_statement: 'if' '(' boolean_expression ')' 'then' statement 'else' statement;
while_statement: 'while' boolean_expression 'do' statement;
assignment_statement: ID = arithmetic_expression;
print_statement: 'print' ID;
boolean_expression: operand relative_op operand;
operand : ID |INT;
relative_op: '<'|'<='|'>'|'>='|'=='|'/=';
arithmetic_expression: operand|operand WS arithmetic_op WS operand;
arithmetic_op: '+'|'-'|'*'|'/';
ID : ('a'..'z'|'A'..'Z'|'_').
;
INT : '0'..'9'+
;
WS : (' '
| '\t'
| '\r'
| '\n'
) {$channel=HIDDEN;}
;
и здесь грамматика
<program> → program id <compound_statement>
<statement> → <if_statement> | <assignment_statement> | <while_statement> |
<print_statement> | <compound_statement>
<compound_statement> → begin <statement_list> end
<statement_list> → <statement> | <statement> ; <statement_list>
<if_statement> → if <boolean_expression> then <statement> else <statement>
<while_statement> → while <boolean_expression> do <statement>
<assignment_statement> -> id := <arithmetic_expression>
<print_statement> → print id
<boolean_expression> → <operand> <relative_op> <operand>
<operand> → id | constant
<relative_op> → < | <= | > | >= | = | /=
<arithmetic_expression> → <operand> | <operand> <arithmetic_op> <operand>
<arithmetic_op> → + | - | * |/
Предполагаю, что это домашнее задание? –