Ruby 树梢语法中的罗马数字
我想解析一个有序列表,类似于:Ruby 树梢语法中的罗马数字,ruby,treetop,Ruby,Treetop,我想解析一个有序列表,类似于: 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' /
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
但是,相应的解析器无法解析文本。什么坏了?您不小心超载了
文本。将第一行重命名为行
,然后为行
添加另一条规则
围绕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
生成的语法图变得更加简单。您意外地重载了文本。将第一行重命名为行
,然后为行
添加另一条规则
围绕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
生成的语法图变得更加简单。我的答案对您有用吗?我的答案对您有用吗?谢谢您的回答。这正是我需要知道的。我还做了你建议的重构,使我的语法更加清晰简洁。谢谢,谢谢你的回答。这正是我需要知道的。我还做了你建议的重构,使我的语法更加清晰简洁。谢谢