List OCaml解析列表
我想将“[a;b;c;d;e;f;g]”解析为“a::b::c::d::e::f::g::[]” 在我的解析器中,我有List OCaml解析列表,list,parsing,ocaml,lexical-analysis,cons,List,Parsing,Ocaml,Lexical Analysis,Cons,我想将“[a;b;c;d;e;f;g]”解析为“a::b::c::d::e::f::g::[]” 在我的解析器中,我有 listOps: | combOps COLONCOLON listOps { Bin($1,Cons,$3) } | combOps SEMI listOps { Bin($1,Cons,$3) } | combOps { $1 } ; 我把这个放在更下面 | LBRAC RBRAC
listOps:
| combOps COLONCOLON listOps { Bin($1,Cons,$3) }
| combOps SEMI listOps { Bin($1,Cons,$3) }
| combOps { $1 }
;
我把这个放在更下面
| LBRAC RBRAC { NilExpr }
| LBRAC listOps RBRAC { $2 }
但我不知道如何让它阅读“[”和“]”之间的列表,因为它的末尾有一个“:[]”。
有什么想法吗 我觉得你给出的语法不太正确。本质上,它处理
:
和代码>相同。因此,它将把[a::b]
和[a;b]
视为相同。如果您知道如何以不同的方式处理这两种情况,您可能会在用:
指定的列表末尾找到一个位置来处理[]
作为旁注,如果允许a::b::[]
则允许::
的右侧为非空列表。因此,您可能希望允许a::[b]
,就像在OCaml中一样。也许你不想,这是你的语法问题