Ragel 解析没有 EOF 分隔符的键值对
Ragel Parse Key Value Pairs Without delimiter for EOF
所以我有一个简单的字符串,我希望通过 ragel 状态机 运行。
key1=value1; key2="value2"; key3=value3
这是我的 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 ;
我遇到的问题是在最后一个 key/value 对之后我永远不会有分号,所以我希望它是可选的,但是当我这样做时状态机发现了几个补丁的价值。有没有某种语法我可以说 pair 必须以 (";" | *eof*)
?
结尾
我确实改变了,我的主线是这个,但这似乎是一个 hack,并不能真正与我想用这个状态机做的其他一些事情一起工作。
main := string >begin_parser @end_parser $/on_value;
我太专注于 Ragel 语法而没有考虑我是如何处理的。与其尝试在末尾添加一个可选的分号,不如在它已经处理了一个键值对之后在前面强制添加一个分号。
pair = ( name "=" (value | "\"" value "\"") ) ;
string = pair ( "; " pair )* ;
所以我有一个简单的字符串,我希望通过 ragel 状态机 运行。
key1=value1; key2="value2"; key3=value3
这是我的 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 ;
我遇到的问题是在最后一个 key/value 对之后我永远不会有分号,所以我希望它是可选的,但是当我这样做时状态机发现了几个补丁的价值。有没有某种语法我可以说 pair 必须以 (";" | *eof*)
?
我确实改变了,我的主线是这个,但这似乎是一个 hack,并不能真正与我想用这个状态机做的其他一些事情一起工作。
main := string >begin_parser @end_parser $/on_value;
我太专注于 Ragel 语法而没有考虑我是如何处理的。与其尝试在末尾添加一个可选的分号,不如在它已经处理了一个键值对之后在前面强制添加一个分号。
pair = ( name "=" (value | "\"" value "\"") ) ;
string = pair ( "; " pair )* ;