作为学习练习,我正在尝试使用功能解析器库 fparsec ( FParsec ) 为 graphviz 点语言 ( The DOT language ) 实现解析器。该语言描述图形。
查看语言定义,我不得不写下以下定义:
let rec pstmt_list = opt(pstmt .>> opt(pchar ';') >>. opt pstmt_list)
wherepstmt
和pchar ';'
是解析器,.>>
将>>.
左解析器的出现与右解析器的出现组合opt
,并将其参数解析器的可选出现解析为选项值。然而,这个定义并不能抱怨“......结果类型将是无限的......”。
通过查看上面链接的 DOT 语言,这个示例可能最容易理解。
我知道以下看似相关的问题:
但是我的 F# 知识可能还不足以翻译它们,如果它们在这里适用的话。