Xtext: 输入错误的规则或 'missing RULE_* at'

Xtext: enter wrong rule or 'missing RULE_* at'

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

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.'

如何在生成 'Person' 对象之前或输入 'Person' 规则之前检查所有标记?

lexing 是免费的。因此,一个人词法化了一个名字,总是词法化了一个名字

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