Parsing Xtext中的数字/字符串语法错误
我试图创建包含数字和字符串的语法,如下所示: 日期:2013年3月2日 我创建了一套规则,或多或少地适应了这一点:Parsing Xtext中的数字/字符串语法错误,parsing,xtext,Parsing,Xtext,我试图创建包含数字和字符串的语法,如下所示: 日期:2013年3月2日 我创建了一套规则,或多或少地适应了这一点: Date: 'Date': DAY Month YEAR ; terminal DAY: ('1'..'9') | (('1'..'3')('0'..'9')) ; Month: name = ('Jan'|'Feb'|'Mar'|'Apr) ; terminal YEAR ('0'..'2)('0'..'9')('0'..'9')('
Date:
'Date': DAY Month YEAR
;
terminal DAY:
('1'..'9') | (('1'..'3')('0'..'9'))
;
Month:
name = ('Jan'|'Feb'|'Mar'|'Apr)
;
terminal YEAR
('0'..'2)('0'..'9')('0'..'9')('0'..'9')
;
这套规则似乎有一些问题:
请有人提出建议。这里有一个设计问题。通常,您必须尽可能少地使用自定义端子。自定义终端对语法有全局影响,使语法不那么灵活,错误恢复效率低下 我理解您的意图:您希望约束您的DSL以防止解析不敏感的数据。这是一个好主意,但定制终端不是为此类任务而设计的。经验法则是:
- 尽可能多地使用标准端子
- 让你的lexer解析几乎所有的输入
- 让解析器检测语法错误(如缺少“]”),但不检测域约束,如(1)
Date: 'Date': day=INT month=Month year=INT ; enum Month: JANUARY='Jan' | FEBRUARY='Feb' | MARCH='Mar' | APRIL='Apr' ;