我想将"[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 { NilExpr }
| LBRAC listOps RBRAC { $2 }
但我不知道如何将"["one_answers"]"之间的列表读取为末尾有"::[]"。有什么想法吗?
你的语法在我看来不太正确。从本质上讲,它对::
和;
一视同仁。因此将CCD_ 3和CCD_。如果您弄清楚如何以不同的方式处理这两种情况,您可能会在用::
指定的列表末尾找到一个位置来处理[]
。
作为旁注,如果允许a :: b :: []
,则允许::
的右侧为非空列表。因此,您可能希望允许a :: [b]
,就像它在OCaml中一样。或者你宁愿不要,这是你的语法!