xtext: выражение / фактор / термин грамматика - PullRequest
1 голос
/ 25 февраля 2012

Это, наверное, один из тех известных примеров, которые где-то есть в интернете, но я не могу его найти.

Я пытаюсь изучить XText, и я подумал, что анализатор выражений калькулятора будет хорошим началом Но я получаю синтаксические ошибки в моей грамматике:

Expression:
    Term (('+'|'-') Term)*;

Term:
    Factor (('*'|'/') Factor)*;

Factor:
    number=Number | variable=ID | ('(' expression=Expression ')');

Я получаю эту ошибку в строках Expression и Term:

Multiple markers at this line
 - Cannot change type twice within a rule
 - An unassigned rule call is not allowed, when the 'current'
   was already created.

Что дает? Как я могу это исправить? И когда у меня есть instanceName=Rule против Rule записей в грамматике?

1 Ответ

2 голосов
/ 25 февраля 2012

Я скачал xtext, интегрированный с eclipse, и он поставляется с примером калькулятора, который выполняет примерно то, что вы хотели бы назвать арифметикой. Из того, что я могу собрать, вам нужно назначить ассоциативность вашим токенам. Эта грамматика отлично подходит для меня:

Expression:
    Term (({Plus.left=current}'+'|{Minus.left=current}'-') right=Term)*;

Term:
    Factor (({Multiply.left=current} '*'| {Division.left=current}'/') right=Factor)*;

Factor:
    number=NUMBER | variable=ID | ('(' expression=Expression ')');

Пример грамматики, которую они имеют для арифметики, можно посмотреть здесь . Он включает в себя немного больше, чем ваши, как вызовы функций, но основы те же.

...