OCaml正在分析列表



我想将"[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中一样。或者你宁愿不要,这是你的语法!

相关内容

  • 没有找到相关文章

最新更新