haskell

抽象構文木のダンプ準備(代数的データ型の出力練習)

Verilogパーサで生成した抽象構文木のダンプ準備として 代数的データ型を出力するコードで感じをみてみました。 webで読むことのできる Real World Haskellベータ版の JSONデータを操作する章を参考にしました。 Chapter 5. Writing a library: working with…

Verilogパーサで抽象構文木を生成するようにした

Verilogファイルから、抽象構文木を生成できるようにしました。 処理できる構文はまだまだ限定的ですが。。 Haskell Parsecで直接扱うことのできない左再帰の構文を 右再帰に変形している部分があるのですが (expression構文のところ) ここをパースして右再…

抽象構文木をどうしようかと

とりあえず Verilogのシンタックスチェックできる程度、ということで (意味解析してないから、たとえば入力ポートの信号と input宣言の信号が合ってなくても文句言わないくらいザルですし) 遠くを見ると気を失いそうになるのですが わからないことを書き出…

左再帰の除去についてプチまとめ

Verilogパーサを書き進めていくと、Verilog構文の左再帰に遭遇します。 Haskell Parsecは再帰下降パーサということで、左再帰の構文をそのまま書くと stack overflowを起こしてうまく処理を続けられません。 うまいこと左再帰を除去(右再帰に置き換える)す…

lexemeパーサを使うようにした

今週にはいって風邪をひいたりして、あまり作業を進められていないのですが とはいえ、溜め込むと書くのが億劫になってしまうので、少しでも書いておこうと思います。 前回、とりあえず Vparsecという名前で書いています - kei-os2007 against the machine!!…

githubに vparsecリポジトリを作りました

githubで開発を進めるのは初めてですが、習うより慣れろでいくことにします。 とりあえずリポジトリを作りました。 はてダにソースをちまちま貼っていくのも、やがて限界がくるだろうし。 http://github.com/kei-os/vparsec/tree/master なんか、こんなの置…

字句解析フェーズ

前回の実装では、Verilogソースファイルをいきなりパースしていて いわゆる字句解析フェーズが抜けています。 そのため、Verilogをパースする処理のなかで ちまちまと空白文字を読み飛ばす羽目になっていて、冗長なソースになっています>< 短い構文だと、…

とりあえず Vparsecという名前で書いています

とりあえず Parsecをちゃんと使えてるかどうかをチェックしたいので semantic valueの処理は全然作り込んでいなくて パースした文字列を表示する処理だけ書いています。 declarationを書いているのだけど、どんどん繋がっていってキリがないので 一旦 module…

Haskell Parsecの資料

あとで振り返れるよう、メモを残しておこう、っということで Haskell Parsecの資料をメモメモ。 ここで Parsecのドキュメントやソースコードがダウンロードできる。 http://legacy.cs.uu.nl/daan/parsec.html Parsecの使い方を学習できる。 http://legacy.cs…

GHC 6.10.1 で readlineから editlineに変わっていた

GHCを 6.10.1 にアップデートしたのだけど ghciを使ってて どうも viモードで使えなくなってるなぁ、と思っていて調べてみると このバージョンで、readlineから editlineに変わっているらしいことがわかった。 http://madscientist.jp/~ikegami/diary/200811…

Haskellの Parsec使って Verilogパーサを書こうかと

今年の 3月頃に、yacc/lexで Verilogパーサを書き始めていたのだけど... Verilogパーサ - kei-os2007 against the machine!! 書きかけのコードを入れていた PowerBook G4を失ってしまい、それっきりになっていた>< 大敗 - kei-os2007 against the machine!…

Haskellことはじめ

ここのところ、ふつける(ふつうのHaskellプログラミング)を読んだりしながら Haskellをちまちまと勉強しているのだけど、ようやく体に入ってきた感じがする。 昨日の「どう書く?org」のお題を解いてみたら、同様の回答がすでにあったのだけど、メモのため…