Xtext:在'

时间:2016-03-16 00:26:58

标签: parsing grammar xtext backtracking

我想从随机文本中解析所有名称。名称格式如下:

Lastname F.

其中F - 名字的第一个字母。所以,我创建了这个语法:

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

generate article "http://www.xtext.org/example/mydsl/Article"

Model : {Model}((per += Person)|(words += NON_WS))*;
Person : lastName = NAME firstName = IN;

terminal NAME : ('A'..'Z')('a'..'z')+;
terminal IN : ('A'..'Z')'.';
terminal NON_WS : !(' '|'\t'|'\r'|'\n')+;

它适用于这个例子:

Lastname F. some text. Lastname F.

但它在这一次崩溃了:

Lastname F. some text. New sentence. Lastname F.
                           ^^^^^^^^^ missing RULE_IN at 'sentence.'

如何在生成“人物”对象之前或输入“人物”规则之前包括所有令牌的检查?

1 个答案:

答案 0 :(得分:0)

lexing是免费的kontext。因此,有一个名字,总是有名字

Model : {Model}((per += Person)|(words += (NON_WS|NAME)))*;