[英]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.