我在写一个解释器,使用ocamlyacc和ocamllex编译我的解析器和词法分析器。 我的问题是,我有一个文件卡列斯测试,包含在词法分析器中定义的两个命令: print a
print b
但解释只是执行行只print a!我知道问题主要在解析器中,需要递归。我将它固定为这样(下面的代码),但它仍然不起作用。 %{
open Path
%}
%token <int> INT
我试图在OCaml中编写解释器,我在这里遇到问题。 在我的计划,我想打电话给这样的函数,例如: print (get_line 4) // print: print to stdout, get_line: get a specific line in a file
我怎么能这样做?问题出现在我们的解析器中,我认为是这样,因为它定义了程序将如何运行,函数是如何定义的以及程序的流程。这是我迄今为
我需要在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 ... 然而,
我有下面的代码也有更多像expr:int {} |布尔{}等,但我不知道什么是我应该写在这种解析器的类型,我有一个计算器的例子,与int一起工作,类型是int,但在我的程序中我有浮动字符串等。 %{
dont know what to write here
%}
%token <int> INT
%token <float> FLOAT
%token <char> CHAR
%to
下面是一个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