在實現真實世界(TM)的語言,我經常遇到這樣的情況: (* language Foo *)
type A = ... (* parsed by parse_A *)
type B = ... (* parsed by parse_B *)
type collection = { as : A list ; bs : B list }
(* parser ParseFoo.mly *)
我一直在努力通過「現代編譯器在ML中的實現」,我將SML轉換爲OCaml。本書定義了一種名爲Tiger的語言,該語言有一個let ... in ... end語法用於爲給定表達式聲明範圍內的類型,變量和函數。此外,相同類型的相鄰聲明應該組合在一起以允許相互遞歸。 我試圖代表這是巨石與下面的文法片段: %right FUNCTION TYPE
.
.
.
decs: l = list(d
我有下面的代碼也有更多像expr:int {} |布爾{}等,但我不知道什麼是我應該寫在這種解析器的類型,我有一個計算器的例子,與int一起工作,類型是int,但在我的程序中我有浮動字符串等。 %{
dont know what to write here
%}
%token <int> INT
%token <float> FLOAT
%token <char> CHAR
%to
我使用的巨石定義在ML現代編譯器實現所描述的老虎語言,here是手動: exp:
| lv = lvalue { Lvalue lv }
| i = INT { Int i }
| s = STRING { String s }
......
lvalue:
| i = ID { Id i }
| lv = lvalue D