簡體   English   中英

樹梢語法中的羅馬數字

[英]Roman numerals in treetop grammar

我想解析一個有序列表,類似於:

I - Something
II - Something else...
IX - Something weird
XIII - etc

到目前為止,我的樹梢語法是:

rule text
    roman_numeral separator text newline
end

rule roman_numeral
    &. ('MMM' / 'MM' / 'M')? (('C' [DM]) / 
    ('D'? ('CCC' / 'CC' / 'C')?))? (('X' [LC]) / 
    ('L'? ('XXX' / 'XX' / 'X')?))? (('I' [VX]) / 
    ('V'? ('III' / 'II' / 'I')?))?
end

rule separator
    [\s] "-" [\s]
end

rule text
    (!"\n" .)*
end

rule newline
    ["\n"]
end

但是,相應的解析器無法解析文本。 什么壞了?

您不小心使text超載。 重命名第一個line ,然后添加其他規則lines

換行周圍的報價似乎也沒有必要。

側面提示-您可以在text規則中重復使用newline規則以使其保持干燥。

grammar Roman

  rule lines
    line*
  end

  rule line
    roman_numeral separator text newline
  end

  rule roman_numeral
    &. ('MMM' / 'MM' / 'M')? (('C' [DM]) /
    ('D'? ('CCC' / 'CC' / 'C')?))? (('X' [LC]) /
    ('L'? ('XXX' / 'XX' / 'X')?))? (('I' [VX]) /
    ('V'? ('III' / 'II' / 'I')?))?
  end

  rule separator
    [\s] "-" [\s]
  end

  rule text
    (!newline .)*
  end

  rule newline
    [\n]
  end

end

更新資料

您可以通過消除否定的前瞻和單個字符類來簡化語法。

rule separator
  " - "
end

rule text
  [^\n]*
end

生成的語法圖變得更加簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM