Ragel Parse键值对没有EOF的分隔符

时间:2016-11-28 20:17:18

标签: ragel

所以我有一个简单的字符串,我希望通过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;

1 个答案:

答案 0 :(得分:0)

我太熟悉Ragel语法,并没有考虑我的处理方式。我没有尝试在末尾添加一个可选的分号,而是在它已经处理了一个键值对之后,我应该在前面强制一个。

pair = ( name "=" (value | "\"" value "\"") ) ;
string  = pair ( "; " pair )* ;