Эти ошибки происходит из-за вашей реализации правил правила rule
rule:
rul1 'and' rul2
;
Как я понимаю rule
имеет два атрибута: rul1
и rul2
. Но в вашей реализации rule
не имеет никаких атрибутов. Чтобы определить rul1
и rul2
как атрибуты, вы присвоили эти элементы атрибуту. Это может выглядеть следующим образом:
rule:
rul1=rul1 'and' rul2=rul2
;
Вы смотрели в документацию XText [1], чтобы узнать о синтаксисе языка грамматики и семантики?
Вещи, которые вы должны знать для понимания вашей ошибки являются следующие:
Признаком правило синтаксического анализа нужно имя. К этому имени вы назначаете значение, которое является другим именем правил парсера. Он похож на Ассинг значения поля в Java:
int i = 42;
Объявление поле состоит из типа полей (INT) и имя поля (I), это обычно является followd оператором присваивания (=) и значение (42). Атрибут Definiton из правила синтаксического анализа по следующей схеме:
RuleA: 'some syntax' attributeName=OtherRule 'more syntax';
OtherRule: 'other syntax' attribute=NextRule ... ;
...
Правило парсера в Xtexts языке грамматики как класс Java. RuleName
соответствует class ClassName
. Затем вы можете определить некоторый статический синтаксис с помощью 'keyword'
. Если какое-либо другое правило должно происходить в любом другом правиле, его можно понимать как объявление поля. Это правило является атрибутом, который реализуется следующим образом:
attributeName=AnyRule
Где attributeName
соответствует названию поля. Но для атрибута присваивается тип значения (AnyRule).
КПП. Я настоятельно рекомендую, чтобы имена правил начинались с буквы «Столица», а имена атрибутов должны начинаться с буквы нижнего регистра.
[1] https://www.eclipse.org/Xtext/documentation/301_grammarlanguage.html
спасибо, у меня есть еще один вопрос, пожалуйста, потому что есть некоторые частные случаи, не упомянутые в документации , например: predex: \t '{' exp0 = ехр ((('и' | 'или') exp1 = exp) *)? '}' \t \t ; \t \t Я хочу, чтобы это было так {действие} {действие и действие} {действие или действие и действие) .... но я получаю только первые и вторые случаи в редакторе, я имею в виду, используя (или | и) всего один раз даже при использовании '*' – abdozmeir
Что именно вы хотите? Я понимаю, что вы хотите иметь дерево выражений с операциями 'and' или' or'. Для этого взгляните на http://blog.efftinge.de/2010/08/parsing-expressions-with-xtext.html. – Joko