2013-12-08 1 views
1

Я просто возиться с JavaCC для своего собственного языка и у меня возникают проблемы выяснить, почему я постоянно получаю ошибки выбора конфликта в этом коде ниже,JavaCC Выбор Конфликт Ошибка

void term() : 
{} 
{ 
    factor() 
    (//choice conflict here 
    (<PLUS> | <MINUS>) factor() 
)* 
} 


void id() : 
{} 
{ 
    <LETTERS> 
    (//choice conflict here 
    <LETTERS> | <NUMBERS> 
)* 
} 

Буквы и цифры просто просто «A» - «Z», «a» - «z» и «0» - «9». Если бы кто-то мог помочь, это было бы очень полезно.

ответ

0

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

Аналогичная проблема с идентификатором. Что-то, что может следовать за id, может начинаться с буквы или с помощью числа.

Возможно, на вашем языке существует возможность иметь два выражения в строке.

1

Должно возникнуть проблема в скрытой части вашего грамматиста. Я использовал ваши постановки и построил этот простой рабочий грамматический файл (JavaCC 5). Кстати, вы не должны использовать постановления (id), чтобы принимать идентификаторы. Вместо этого вы должны создать для этого «слов» вашего язык отдельных лексем, как:

TOKEN: 
{ 
    < SIMPLE_INTEGER: (<NUMBERS>)+ > 
    | < SIMPLE_IDENTIFIER: (<LETTERS>)+ (<NUMBERS> | <LETTERS>)* > 
} 

Теперь вы можете построить производства с использованием <SIMPLE_INTEGER> принять целое или <SIMPLE_IDENTIFIER> принимать идентификатор.

Это рабочий файл грамматики с вашими произведениями.

options { 
    STATIC = true; 
} 

PARSER_BEGIN(MyParser) 
public class MyParser { 
} 
PARSER_END(MyParser) 

TOKEN : { 
    <PLUS: "+"> 
| <MINUS: "-"> 
} 

TOKEN: { 
    <LETTERS: ["a"-"z", "A"-"Z"] > 
| <NUMBERS: ["0" - "9"] > 
} 

void factor() : {} 
{ 
    (<NUMBERS>)+ 
} 

void term() : {} 
{ 
    factor() ((<PLUS> | <MINUS>) factor())* 
} 

void id() : {} 
{ 
    <LETTERS> (<LETTERS> | <NUMBERS>)* 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^