给出以下语法:
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, Keyword
或CharacterRange
的{{1}}。
答案 0 :(得分:0)
关键字成为Lexer规则的一个好。因此,您有两个Lexer规则
terminal FULL_STOP_KEYWORD: '.' ;
和
terminal ID: 'a' | '.';
Lexer并不是有状态的。只有一条规则可以获胜。因此'。'将始终作为关键字而不是作为ID