Tôi có nhiệm vụ viết một trình phân tích cú pháp (đồ chơi) cho ngữ pháp (đồ chơi) bằng OCaml và không chắc chắn cách bắt đầu (và tiếp tục) vấn đề này.Phân tích cú pháp ngữ pháp bằng OCaml
Dưới đây là một AWK ngữ pháp mẫu:
type ('nonterm, 'term) symbol = N of 'nonterm | T of 'term;;
type awksub_nonterminals = Expr | Term | Lvalue | Incrop | Binop | Num;;
let awksub_grammar =
(Expr,
function
| Expr ->
[[N Term; N Binop; N Expr];
[N Term]]
| Term ->
[[N Num];
[N Lvalue];
[N Incrop; N Lvalue];
[N Lvalue; N Incrop];
[T"("; N Expr; T")"]]
| Lvalue ->
[[T"$"; N Expr]]
| Incrop ->
[[T"++"];
[T"--"]]
| Binop ->
[[T"+"];
[T"-"]]
| Num ->
[[T"0"]; [T"1"]; [T"2"]; [T"3"]; [T"4"];
[T"5"]; [T"6"]; [T"7"]; [T"8"]; [T"9"]]);;
Và đây là một số mảnh vỡ để phân tích:
let frag1 = ["4"; "+"; "3"];;
let frag2 = ["9"; "+"; "$"; "1"; "+"];;
Những gì tôi đang tìm kiếm là một rulelist đó là kết quả của sự phân tích một đoạn, chẳng hạn như cái này cho frag1 ["4"; "+"; "3"]:
[(Expr, [N Term; N Binop; N Expr]);
(Term, [N Num]);
(Num, [T "3"]);
(Binop, [T "+"]);
(Expr, [N Term]);
(Term, [N Num]);
(Num, [T "4"])]
Hạn chế là không sử dụng bất kỳ thư viện OCaml khác ngoài Danh sách ...:/
Vì vậy, ocamllexx và ocamlyacc nằm ngoài câu hỏi? – nlucaroni