parsing

S式PEG改良

変数に値を捕捉するフォームを、括弧を使って書けるようにしてみた。 (parse-string-with ((add <- (mult lval) #\+ (add rval) :return `(+ ,lval ,rval) / (mult val) :return val) (mult <- (prim lval) #\* (mult rval) :return `(* ,lval ,rval) / (pri…

S式PEGパーサ:プロトタイプ完成

一応簡単な例は動くことが確認できた。まだまだバグがいっぱいあるだろうけど、動くと嬉しいね! gosh> (parse-string-with ((add <- < mult lval > #\+ < add rval > :return `(+ ,lval ,rval) / < mult val > :return val) (mult <- < prim lval > #\* < m…

S式PEGパーサつづき

構文解析してAbstract Syntax Treeを構築するところまでは昨日までで大体できてた。そこからPEGライブラリを使ってパーサを構築するコードを書きつつも、構文を解析しやすいように細かい変更を重ねる。あーでも、構文は結局最初のでもよかったんじゃまいかと…

LAOXでパーサを書く

今のところの成果 (parse-grammars '((add <- < mult lval > #\+ < add rval > :return (+ lval rval) / <mult val> :return val) (mult <- < prim lval > #\* < mult rval > :return (* lval rval) / <prim val> :return val) (prim <- #\( < add val > #\) :return val / < dec</prim></mult>…

Packrat Parser for S-exp PEG

S式で定義したPEGから、パーサを作れたらいいなーと思ってパーサジェネレータを製作中。パーサジェネレータの、S式で表現したPEGをパースする部分ができあがってきた。 ;; ;; multitive '+' additive / multitive ;; (parse '(< multitive lval > #\+ < addi…

Recursive Descent ParserとPackrat Parser

Packrat Parsing: Simple, Powerful, Lazy, Linear Timeの論文にある簡単な数式のパーザを手書きして、Recursive Descent ParserとPackrat Parserで速度を比較。Packrat ParserとRecursive Descent Parserは基本的な構文解析の枠組みは似ている。Recursive D…