トップ «前の日記(2007-09-23) 最新 次の日記(2007-09-30)» 編集

Route 477



2007-09-27

[ruby][prog] プログラミング言語「ず」を公開しました

先日の言語開発合宿で製作したプログラミング言語「ず」を公開しました

「ず」はアスキーアートで図を描くとそれがそのまま実行される、フローチャート指向言語です。

性格判断を行う程度のプログラムが書けます。

サンプルプログラム:

 *-----------------------*
 |ask "do you like ruby?"|            *--------------------------------*
 |                       +------------> ask "then, do you like python?"|
 *------------------+----*            |                                |
                    |                 *-----+------------------------+-*
                    |                       |                        |
                    |                       |                        |
                    |            *----------v----------------------* |
  *-----------------v-----------*|say "maybe you don't like LL..." | |
  |say "maybe you like Haskell."|*---------------------------------* |
  *-----------------------------*                                    |
                                      *------------------------------v---*
                                      |                                  |
                                      |say "maybe you like OCaml."       |
                                      *----------------------------------*

実行結果:

yhara@meteor:~/src/zu/zu-0.1.0 % ./zu sample.zu
do you like ruby? [y/n]
> n
then, do you like python? [y/n]
> y
maybe you like OCaml.

(内容に深い意味はありません。^^;)

処理系のダウンロードはこちらからどうぞ。

AAグラフのパーザ部分は、Rubyのライブラリとして独立に公開予定です。ぜひ面白い使い道を考えてみてください。

[ruby] TextGraph-0.1.0をリリースしました

アスキーアートで書かれた有向グラフをパースするRubyライブラリ、TextGraphをリリースしました。

フゥゥーー……
初めて…………Rubyforgeでgemを公開しちまったァ〜〜〜〜〜♪
でも想像してたより、なんて事はないな。

とりあえず newgem 使ってフォルダ構成を自動生成しておけば rake clean → rake package でgemが出来るので、あとはアップして終了。簡単でした。 詳しい手順は以下のサイトが非常に参考になりました。ありがとうございます。

*----*   *---*   => #<TextGraph::Graph:0x2b4fc09a19c0
|foo +--->bar|        @cells = [
*-+--*   *---*          #<TextGraph::Cell:0x2b4fc099c538 @y=0, @raw_content="foo ", @x=0, @h=3, @w=6>,
  |                     #<TextGraph::Cell:0x2b4fc099b8b8 @y=0, @raw_content="bar", @x=9, @h=3, @w=5>,
 *v---*                 #<TextGraph::Cell:0x2b4fc0999ab8 @y=4, @raw_content="baz ", @x=1, @h=3, @w=6>
 |baz |               ]
 *----*               @links = [[0, 1], [0, 2]],

アルゴリズムは特に難しいことはしてなくて、

  1. まず文字列を文字(アスキーコード)の配列の配列に分ける
  2. 全ての「*」について、そこを左上とする四角ができているかを調べる
  3. 全ての「+」について、そこから上下左右に矢印が伸びているかを調べる
  4. 全ての矢印について、始点と終点がどの四角に属しているのかを調べる

という感じです。

gem install textgraph でインストールできるので、みなさんもぜひTextGraphを使ったアプリケーションを 考えられるものなら考えてみてくださいね!