【问题标题】:OCaml Parsing a listOCaml 解析列表
【发布时间】:2013-02-19 01:00:44
【问题描述】:

我想将“[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 }

但我不确定如何让它读取“[”和“]”之间的列表,因为它的末尾有一个“::[]”。 有任何想法吗?

【问题讨论】:

    标签: list parsing ocaml lexical-analysis cons


    【解决方案1】:

    您给定的语法对我来说看起来不太正确。本质上它对待::; 是一样的。所以它会将[a::b][a;b] 视为相同。如果您弄清楚如何以不同方式处理这两种情况,您可能会在:: 指定的列表末尾找到一个处理[] 的地方。

    作为旁注,如果您允许a :: b :: [],则您允许:: 的右侧为非空列表。因此,您可能希望 a :: [b] 被允许,就像在 OCaml 中一样。或者也许你不想,这是你的语法!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-07
      • 2015-02-23
      • 2012-01-20
      • 1970-01-01
      • 2013-01-31
      • 2013-04-29
      • 1970-01-01
      • 2013-01-16
      相关资源
      最近更新 更多