所以我有一个简单的字符串,希望能通过 ragel 状态机运行。
键1=值1;键2=“值2”;键3=值3
这是我的 ragel 的简化版本
# Key Value Parts
name = ( token+ ) %on_name ;
value = ( ascii+ -- (" " | ";" | "," | "\r" | "\n" | "\\" | "\"" ) ) %on_value ;
pair = ( name "=" (value | "\"" value "\"") "; " ) ; ## ISSUE WITH FORCING ;
string = ( pair )+ ;
# MACHINE
main := string >begin_parser @end_parser ;
我遇到的问题是在最后一个键/值对之后我永远不会有分号,所以我希望它是可选的,但是当我这样做时,状态机会为该值找到几个补丁。是否有某种语法我可以说 pair 必须以 a 结尾(";" | *eof*)
?
我确实改变了,我的主线对此,但它似乎是一个黑客,并不能真正适用于我想用这个状态机做的其他一些事情。
main := string >begin_parser @end_parser $/on_value;