ocamlyacc

    0热度

    2回答

    我在写一个解释器,使用ocamlyacc和ocamllex编译我的解析器和词法分析器。 我的问题是,我有一个文件卡列斯测试,包含在词法分析器中定义的两个命令: print a print b 但解释只是执行行只print a!我知道问题主要在解析器中,需要递归。我将它固定为这样(下面的代码),但它仍然不起作用。 %{ open Path %} %token <int> INT

    1热度

    2回答

    我是OCaml的初学者,并试图构建一个解析器,我想要一个列表将所有方法存储在我的类中。这是我在.mly文件中的一部分。 init_method_list: { [] } | method_list method_decl { List.rev($1) } ; method_list: method_decl { [ $1 ] } | method_li

    1热度

    1回答

    我正在尝试构建一个编译器,目前我已经完全迷失了。我有一个主类,并希望能够与继承申报的其他类,即class newClass extends classThatHasBeenDeclaredBefore { }我输入看起来像 input: class_main class_list { /* New program created */ } 和我class_list包括我在我的程序中

    1热度

    2回答

    我试图在OCaml中编写解释器,我在这里遇到问题。 在我的计划,我想打电话给这样的函数,例如: print (get_line 4) // print: print to stdout, get_line: get a specific line in a file 我怎么能这样做?问题出现在我们的解析器中,我认为是这样,因为它定义了程序将如何运行,函数是如何定义的以及程序的流程。这是我迄今为

    0热度

    1回答

    我需要在OCaml解析器中给予高优先级和左关联性来运行应用程序。我有一大堆不同的令牌它如 %token LET REC EQ IN FUN ARROW %token IF THEN ELSE %token PLUS MINUS MUL DIV LT LE NE AND OR %token LPAREN RPAREN 匹配,我给所有这些优先级和结合使用%left,right ... 然而,

    2热度

    2回答

    我遇到了关联性问题。出于某种原因,我=运算符的优先级高于我::运算 因此,举例来说,如果我有 “1 :: [] = []” 在作为串,我会得到 1 = [] :: [] 为我的表达,而不是 [1] = [] 如果我的字符串是 “1 :: 2 :: [] = []” 我以为它会解析它成exp1 EQ exp2,然后再解析exp1和exp2。但它作为解析EXP1 COLONCOLON EXP2代替 .

    0热度

    1回答

    所以我有一个包含空字符串的语法。语法是这样的: S->ε S->表达;; S 当我运行我的解析器时,我收到错误“没有更多的状态丢弃”,因此我相信我不能正确表示空字符串。那么我将如何去表示它,特别是在词法分析器.mll文件中? 我知道我需要为此制定一个规则,所以我认为我有这个原因。这是我认为它应该看起来像解析器.mly文件,不包括表达的东西。 s: | EMPTY_STRING { [] }

    0热度

    1回答

    我有下面的代码也有更多像expr:int {} |布尔{}等,但我不知道什么是我应该写在这种解析器的类型,我有一个计算器的例子,与int一起工作,类型是int,但在我的程序中我有浮动字符串等。 %{ dont know what to write here %} %token <int> INT %token <float> FLOAT %token <char> CHAR %to

    5热度

    1回答

    我写一个小解析器与巨石+ Ocamllex和我有两个要求,我似乎无法满足的同时 我想保持一个错误之后解析(报告更多的错误)。 我想打印发生错误的令牌。 我可以很容易地通过使用error令牌。我也可以使用this question建议的方法轻松完成2) 。但是,我不知道一个简单的方法来实现这两个。 我处理错误的方式,现在是这样的: pair: | left = prodA SEPARATOR ri

    1热度

    2回答

    下面是一个ocaml的解析器的样本代码: %{ open Ast %} %token PLUS MINUS TIMES DIVIDE EOF %token <int> LITERAL %left PLUS MINUS %left TIMES DIVIDE %start expr %type < Ast.expr> expr %% expr: expr PLUS