16得票3回答
ocamlyacc解析错误:哪个标记?

我正在使用ocamlyacc和ocamllex。我的语法中有一个错误产生式,会触发一个自定义的异常。到目前为止,我只能让它报告错误位置:| error { raise (Parse_failure (string_of_position (symbol_start_pos ()))) } 但是...

9得票3回答
使用OCamlyacc与外部类型声明

我在expr.ml文件中有一个type expr类型。在parser.mly(OCamlyacc文件)中,我定义了expr规则并给出了类型: %start expr %type <expr> expr 然而,我得到了: File "parser.ml...

9得票3回答
关于ocamlyacc、函数应用语法和优先级的问题

我是OCaml的新手,正在尝试编写一个类似OCaml的简单语法,但我无法理解这个问题。我的语法允许像这样的内容: let sub = fun x -> fun y -> x - y;; 然而,如果我想使用这个定义的函数,可以写成:(sub 7) 3,但是我不能写成sub 7 ...

7得票1回答
在ocamllex中返回多个标记

有没有办法在OCamlLex中返回多个标记? 我正在尝试编写一个缩进语言的词法分析器和解析器,当词法分析器发现缩进级别小于之前的级别时,我想让它返回多个“DEDENT”标记。这将使它能够在多个块结束时通知解析器。 通过这种方法,我将能够使用“INDENT”和“DEDENT”作为“BEGIN...

7得票1回答
在Menhir/Ocamlyacc中为运算符指定动态优先级和优先顺序

我正在尝试解析一种语言,其中运算符具有动态属性(优先级和结合性),使用类似于Ocamlyacc的Menhir解析器。在词法分析阶段,所有运算符都填充一个OP:string标记(因此"+"变成了(OP "+")等)。 运算符属性在解析时确定,并填充一个表格,将运算符及其属性关联起来。鉴于此表格...