0

给定以下语法:

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实例化 a。

是什么让 Xtext 决定支持Range?

编辑:具体来说,我想知道为什么Xtext 语法本身并不模棱两可,因为范围'a'..'z'可以被解析为 a GroupofKeyword, Wildcard, Wildcard, Keyword或 a CharacterRangeof Keyword, Keyword

4

1 回答 1

0

关键字成为 Lexer Rules 一口井。因此,您有两个 Lexer 规则

terminal FULL_STOP_KEYWORD: '.' ;

terminal ID: 'a' | '.';

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

于 2015-08-29T20:07:10.623 回答