ocamlyacc

    4热度

    1回答

    是否有任何方法可以在OCamlLex中返回多个标记? 我正在尝试为基于缩进的语言编写词法分析器和解析器,并且我希望我的词法分析器在注意到缩进级别小于之前的值时返回多个DEDENT标记。这将允许它在多个块结束时通知解析器。 通过以下这种方法,我将能够使用INDENT和DEDENT作为直接替代了BEGIN和END,因为这两个标记将由INDENT和DEDENT令牌暗示。

    0热度

    1回答

    我完全没有想法。我今天花了每一分钟的时间,但我完全没有想法。 这是我Ocamlyacc语法: input: /* empty */ { } | input stmt { } stmt: extern { print_endline "Got an extern import" } | func { print_endline "Got function defin

    5热度

    1回答

    我试图解析语言,其中的运营商有一个动态属性(优先级和优先级)用巨石解析器(类似于Ocamlyacc)。在词法阶段,所有的运营商填充OP:string令牌(从而“+”变成(OP "+")等)。 运算符属性是在解析时确定的,并填充一个关联运算符及其属性的表。鉴于此表,我如何指示Menhir根据此表的数据动态更改解析运算符的规则的优先级? 感谢, CharlieP。

    2热度

    2回答

    我有一些代码,包括用于域特定语言(逻辑)一个menhir基于解析器。对于我的理智,而调试的缘故,这将是巨大的,可以直接在像这样的顶级键入(公式)这种语言的实例: # f = << P(x,y) & x!=y >> 是campl4/5我唯一的选择?如果是的话,我觉得文件相当吓人。是否有一个示例/教程与我的用例非常接近,我可以想象适应吗? (例如,引入新关键字的语法扩展似乎不相关)。谢谢!

    8热度

    3回答

    我在expr.ml文件中有一个类型expr。在parser.mly(OCamlyacc文件),我定义使expr规则,并给予类型: %start expr %type <expr> expr 不过,我得到: File "parser.mli", line 34, characters 48-52: Error: Unbound type constructor expr

    8热度

    3回答

    我是OCaml新手,我正在尝试编写一个简单的OCaml类语法,而我无法弄清楚这一点。我的语法允许这样的事情: let sub = fun x -> fun y -> x - y;; 但是,如果我想使用这样定义的功能,我可以这样写:(sub 7) 3但我不能写sub 7 3,这真让我心烦。出于某种原因,它被解释为好像我写了sub (7 3)(这将把7作为函数与参数3)。相关章节有: /* oth

    4热度

    3回答

    是否可以为OCamlYacc生成的解析器提供一个明确的标记列表供分析? 我想使用OCamlLex显式生成一个令牌列表,然后我使用Yacc生成的分析器进行分析。但是,标准用例会生成一个分析器,为下一个标记隐式调用词法分析器。这里的令牌是在yacc分析期间而不是之前计算的。从概念上讲,解析器只能处理令牌,但是Yacc生成的解析器提供了一个依赖于词法分析器的接口,这在我的情况下并不需要。

    4热度

    1回答

    我有一个解析器和词法分析器,用ocamlyacc和ocamllex编写。如果要解析的文件过早结束,如我在行尾忘记了分号,则应用程序不会引发语法错误。我意识到这是因为我正在提高和捕捉EOF,这使得词法分析器忽略了未完成的规则​​,但是我应该怎样做才能引发语法错误? 这是我的当前解析器(简化的), %{ let parse_error s = Printf.ksprinf failwith

    0热度

    1回答

    我想知道如何使用ocamllex和ocamlyacc编写三个地址代码? 我搜索了很多关于这个,但我无法找到任何使用ocamlyacc。 我有我的解析器和我的词法分析器工作(都使用ocamlyacc和ocamllex),但现在我必须写一个三地址码发生器使用它们。 例如,假设我有这个解析器(计算器): 我应该如何编写这三个地址代码? 分析器: input: /* empty */ { } |