Xtext消歧

时间:2015-08-28 14:07:28

标签: range grammar keyword xtext disambiguation

给出以下语法:

grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"

Program:
    {Range} ID '.' '.' ID
  | {Group} ID ID ID ID
;

terminal ID:
    'a' | '.'
;

以及以下输入:

a . . a

我认为有两种方法可以解析字符串:作为Range(第一种选择)或Group(第二种选择)。当我在生成的IDE中尝试此操作并检查Ecore模型时,将Range实例化。

是什么让Xtext决定支持Range

编辑:具体来说,我想知道为什么Xtext grammar本身不明确,因为范围'a'..'z'可以解析为Group Keyword, Wildcard, Wildcard, KeywordCharacterRange的{​​{1}}。

1 个答案:

答案 0 :(得分:0)

关键字成为Lexer规则的一个好。因此,您有两个Lexer规则

terminal FULL_STOP_KEYWORD: '.' ;

terminal ID: 'a' | '.';

Lexer并不是有状态的。只有一条规则可以获胜。因此'。'将始终作为关键字而不是作为ID