nDiki : Scheme

Scheme

Gauche

R5RS 準拠の Scheme 処理系

1999年1月20日 (水)

Perl で lex/yacc

最近 Perl で字句解析ルーチン生成系/構文解析ルーチン生成系を作ろうかな、などと考えている。 前にもやろうと思っていたのだが、なにもしていなかった。なぜ Perl でかというと、

  • C/C++言語にはすでに存在する(flex/bison)。
  • Perl にはいいものが存在しない(知らない)。
  • flex/bison はC/C++のものしか生成できない。
  • これは動的に生成し利用すること、また動的に変更することが考慮されていない。
  • Perl なら実行時にサブルーチン定義したり eval できたりする。
  • Perl なら気が楽。

などが理由であろうか。 また自分の研究で設計している言語を Scheme 上で実装しようかなと思っているが、その字句解析ルーチン生成系/構文解析ルーチン生成系が欲しい(あることにはあるが)。 一旦 Perl で生成系を自作しておけば、簡単に他の言語の解析ルーチンを生成できるように拡張できるであろう(と考えたい)。

動的な側面が念頭にあるのは、自分の研究がそういうことをやっているから。

とりあえず lex/yacc(flex/bison)互換/ライクなものを作る予定である。 これらはそれぞれ仕様記述のファイルを読み込んで解析ルーチン(解析用テーブル)を生成する。 ので、とうぜんこの仕様記述言語の字句解析ルーチン/構文解析ルーチンが必要である。 手で書いてもいいのだが、それも面倒だ。 当然字句解析ルーチン/構文解析ルーチン生成系が欲しい。 しかしまだない。 これから作ろうとしているものそのものだから。

方法としては、

  • Perl で手書きで解析ルーチンを作る。それで Perl 用生成系の仕様記述を読ませて、置き換える。
  • Perl の既存の生成系を使う。
  • flex/bison を使って C/C++ 版を作成。その後その生成系で Perl 用生成系の仕様記述を読ませる。

などが考えられる。今回はとりあえず一番最後の方法をとろうと思う。 ただし実際には完全に C/C++ で作るのではなく、字句解析/構文解析ルーチンを flex/bison で生成し、それを Perlエクステンションとして、Perl から呼べるようにすることにする。こうしておけば、

とすることができる。最初のものを全部 C/C++ で書くと、解析ルーチン生成部を C/C++Perl で2回書かなければならないが、この方法ならその部分は Perl で書いておけるので2度手間にならないであろう。

ということ一昨日は flex のコードを眺めて、昨日は Perl エクステンション書き方を調べてみている。 flex で吐いたファイルをそのまま Perl エクステンションのコードとは当然できないので、そのトランスレータをまず作ることする。

スポンサード リンク
[ 1月20日全て ]

2004年4月16日 (金)

新入社員

[ お仕事 ]

先月中旬に面接したが今日から出社。 自分のプロジェクトへの配属となるので、オリエンテーションなどなど。

プログラミングの経験がほとんどないようなので、まずは研修といった感じか。 「実務に結びつく」「短期間に」「基礎から学べて」なんて考えると課題が決まらん。

最初はC言語でプログラムを書いてもらうか。業務では PerlJavaC++ といったところなのだが、どれも最初に覚えてもらうにはどうなのかなと。機械よりの概念もある程度おさえておいて欲しいし。早い段階でオブジェクト指向プログラミングも理解して欲しいが。

ML とか Lisp とか Scheme とかっていってみたいものではあるな。

[ 4月16日全て ]

2004年6月10日 (木)

過去の今ごろ

過去の6月10日より。

  • Gauche 0.7
    • まただ。いつも「今度は Scheme でも」と思うのだが、すぐやめてしまう。
[ 6月10日全て ]

2004年8月9日 (月)

Scheme でプログラムを書く

たまにやってくる「Scheme やるぞ熱」再来。

Gauche 0.8.1 をインストール。 何を書こうかという話になるが、今回はテスト駆動開発入門で「単体テストフレームワークテスト駆動開発で書いてみる」という例があり、新しい言語を学ぶときに良いとあったのでそれに挑戦してみることにした。 Gauche用の xUnit は既にあるようだが、トレーニングということで車輪の再発明。

フレームワーク部分を書いているのか、フレームワーク単体テストを書いているのか、単体テスト用サンプルオブジェクトを書いているのか、何だかわからなくなってくるな (オーバーラップするところもあるし)。

テスト駆動開発入門を参考にしようと思ったが、昨日会社に置いてきてしまったばかりだし。 明日続きをやるか。

[ 8月9日全て ]

2004年8月13日 (金)

PerlScheme実装

最近ころころやる事が変わっているのだが気にしない。 どうせ Scheme をやるなら実装してみようかと。

とりあえず Perl で。パーサはParse::RecDescentで。 Parse::RecDescentを使うのは WiKicker のパーサの試作時以来で久しぶり。 R5RSの構文規則の一部を入力していろいろ実験。 再帰下降でうまく動くように、生成規則の順番を入れかえたりとか。 楽しい。

[ 8月13日全て ]

2004年8月16日 (月)

ぼちぼちと Scheme 処理系実装

書いてみていろいろ見えてくることが。

  • R5RS における syntax と procedure。program と datum。
  • 数の内部表現をどうするか。integer は Math::BigInt を使うとしよう。rational とかはどうしようか。
[ 8月16日全て ]

2013年10月10日 (木)

今日のさえずり: 新しく開発しているアレ、勘定奉行的な名前に変更されました

2013年10月10日

[ 10月10日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

follow us in feedly

月別インデックス
Process Time: 0.057301s / load averages: 0.27, 0.32, 0.44
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker