का उपयोग कर व्याकरण को पार्स करना मेरे पास ओकैम का उपयोग करके एक (खिलौना) व्याकरण के लिए एक (खिलौना) पार्सर लिखने का कार्य है और यह सुनिश्चित नहीं है कि इस समस्या को कैसे शुरू करें (और आगे बढ़ें)। कुछ टुकड़े पार्स करने के लिए हैOCaml
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"]]);;
और यहाँ:
यहां नमूने Awk व्याकरण है
let frag1 = ["4"; "+"; "3"];;
let frag2 = ["9"; "+"; "$"; "1"; "+"];;
क्या मैं के लिए देख रहा हूँ एक rulelist एक टुकड़ा पार्स करने का परिणाम है कि है, जैसे कि 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"])]
प्रतिबंध सूची अलावा अन्य किसी भी OCaml पुस्तकालयों का उपयोग नहीं करने के लिए है ...:/
तो, ओकलेक्लेक्स और ओकमलीक सवाल से बाहर हैं? – nlucaroni