所以我有一个简单的字符串,我希望通过ragel状态机运行。
键1 =值; KEY2 = “VALUE2”; KEY3 =值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 ;
我遇到的问题是在最后一个键/值对之后我永远不会有分号,所以我希望它是可选的,但是当我这样做时,状态机会找到几个值的补丁。是否有某种语法,我可以说对必须以(";" | *eof*)
结束?
我确实改变了,这是我的主线,但它看起来像是一个黑客,并不能与我想用这个状态机做的其他一些事情一起工作。
main := string >begin_parser @end_parser $/on_value;
答案 0 :(得分:0)
我太熟悉Ragel语法,并没有考虑我的处理方式。我没有尝试在末尾添加一个可选的分号,而是在它已经处理了一个键值对之后,我应该在前面强制一个。
pair = ( name "=" (value | "\"" value "\"") ) ;
string = pair ( "; " pair )* ;