我在寫一個解釋器,使用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