Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Proglrの紹介

tkob
March 31, 2018
450

 Proglrの紹介

tkob

March 31, 2018
Tweet

Transcript

  1. SMLと私 • ML-MessagePack https://github.com/tkob/mlmsgpack • UXML https://github.com/tkob/uxml – XML Parser

    • SMLZIP https://github.com/tkob/smlzip – Access to ZIP files • 最近の活動 – SMLでsyslogdを作っています
  2. BNFC互換のLabelled BNF文法定義 token Add "+" ; … token Integer of

    int; EAdd. Exp ::= Exp "+" Exp1 ; ESub. Exp ::= Exp "-" Exp1 ; EMul. Exp1 ::= Exp1 "*" Exp2 ; EDiv. Exp1 ::= Exp1 "/" Exp2 ; EInt. Exp2 ::= Integer ; coercions Exp 2 ;
  3. 生成されるAST structure Ast = struct datatype exp = EAdd of

    Lex.span * exp * exp | ESub of Lex.span * exp * exp | EMul of Lex.span * exp * exp | EDiv of Lex.span * exp * exp | EInt of Lex.span * int …
  4. 生成されるパーサー(概略イメージ) fun go … = … and state15 … =

    … … (* stateNが続く *) and state0 … = … fun parse sourcemap strm = … (* go を呼ぶ *) • 相互末尾再帰関数で状態を表現する – 読めなくもない気分のコード
  5. parseの型 val parse : sourcemap -> strm -> Ast.exp list

    • 何故Ast.expでなくAst.exp listなのか – 多義的な文法かもしれない(文脈自由文法) – ProglrはGeneralized LRを使用
  6. Q: Proglrは私のSMLコンパイラで使えますか? • A: きっと… – 対応処理系: • SML/NJ, MLton,

    Poly/ML, Alice ML, MLKit, Moscow ML, SML# – Proglr自体はMLtonかPoly/MLでビルドするのがおすすめ
  7. Proglrの利用方法(MLton) $ proglr -m mlton -o parse.sml -l scan.ulex calc.cf

    $ mlton main.mlb $ ./main sample.txt • -mオプションで処理系を指定するとプロジェクト一式 (MakefileやMLBやCM)が全部生成される • 用意するのは文法だけ