我试图用FParsec实现一个方法参数解析器。
我想知道在FParsec本身中是否有一些已经实现的特性可以帮助我实现这个目的?我问这个问题,因为FParsec在处理操作符优先级时提供了一些工具,所以可能也有这样的东西。
解析开始和结束大括号是相当直截了当。头痛之处在于处理以下3种可能发生的情况:
方法参数可以包括:
。
我已经有了一些关于如何自己实现这个功能的线索,以防没有任何内置特性,即使用<|>操作符和流复制,但是如果可能的话,我想远离这种低级的东西。
发布于 2011-08-26 03:12:14
我相信你想使用sepBy。
type AST =
| Arguments of AST list
| Argument of string * string
let parseArguments =
spaces
>>. pchar '('
>>. spaces
>>. sepBy parseArgument (pchar ',')
.>> spaces
.>> pchar ')'
|>> Arguments由devoured_elysium编辑:
上面的代码是正确的,尽管它没有编译。我将在这里发布我的编译版本,这样,如果有人只想尝试代码而不费吹灰之力,他们就可以这样做。
type AST =
| Arguments of AST list
| Argument of string
let parseArguments =
spaces
>>. pchar '('
>>. spaces
>>. sepBy (many1Satisfy isLetter |>> Argument) (pchar ',')
.>> spaces
.>> pchar ')'
|>> Arguments
test parseArguments "(a,b,c)" //succeed
test parseArguments "(a,b,c,)" //failhttps://stackoverflow.com/questions/7199589
复制相似问题