我在 xText 中构建了一个语法来识别特定格式的正式表达式并在 Java 中使用生成的对象树。
这是它的样子:
grammar eu.gemtec.device.espa.texpr.Texpr with org.eclipse.xtext.common.Terminals
generate texpr "http://www.gemtec.eu/device/espa/texpr/Texpr"
Model:
(expressions+=AbstractExpression)*
;
AbstractExpression:
MatcherExpression | Assignment;
MatcherExpression:
TerminalMatcher ({Operation.left=current} operator='or' right= MatcherExpression)?
;
TerminalMatcher returns MatcherExpression:
'(' MatcherExpression ')' | {MatcherLiteral} value=Literal
;
Literal:
CharMatcher | ExactMatcher
;
CharMatcher:
type=('text'|'number'|'symbol'|'whitespace') ('(' cardinality=Cardinality ')')?
;
/* Kardinalitäten für CharMatcher*/
Cardinality:
CardinalityMin | CardinalityMinMax | CardinalityMax| CardinalityExact
;
CardinalityMin: min=INT '->';
CardinalityMinMax: min=INT '->' max=INT;
CardinalityMax: '->' max=INT;
CardinalityExact: exact=INT;
ExactMatcher:
(ignoreCase='ignoreCase''(' expected=STRING ')') | expected=STRING
;
/* Variablenzuweisung
*
* z.B. $myVar=number
* */
Assignment:
'$' name=ID '=' expression=MatcherExpression
;
除了“基数”分配外,一切正常。
表达式如下所示:
text number(3) - (任意数量的字母,后跟正好 3 个数字)
symbol number(2->) - (任意数量的特殊字符,后跟至少 2 个数字)
whitespace number(- >4) - (任意数量的空格后跟最多 4 个数字)
number(3->6) - (至少 3 个数字但不超过 6 个)
当我使用此语法运行 Eclipse 时(以便识别我的语言并具有代码完成等),我键入的所有内容都显示在“大纲”选项卡中作为它应该的树结构,除了基数值。
当我向 CharMatcher 添加基数语句时,小加号出现在它之前,但是当我单击它时它就消失了。
谁能告诉我为什么这不起作用?