降价的XText语法

时间:2016-01-22 12:36:46

标签: markdown xtext

我正在为Markdown语法编写XText语法。在markdown中,h1可以用#heading编写。

因此,Heading可以匹配除换行符之外的任何内容。

grammar org.example.domainmodel.DomainModel with org.eclipse.xtext.common.Terminals

generate domainModel "http://www.example.org/domainmodel/DomainModel"

DomainModel:
    (elements += Element)*
;

Element:
    Section1 | Section2
;

Section1:
    '#' name += HEADING '\n'
;

Section2:
    '##' name += HEADING '\n'
;

terminal HEADING: (('A'..'Z') | '_'| ('a'..'z') | ('0'..'9') | '-')* ;

但这会产生错误:

The following token definitions can never be matched because prior tokens match the same input: RULE_INT

此外,标题不能包含任何特殊字符。

编写这种语法的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

而不是使用新的终端规则HEADING,使用已定义的终端规则ID:

Section1:
    '#' name = ID '\n'
;

Section2:
   '##' name = ID '\n'
;