hakeの日記

Windows環境でプログラミングの勉強をしています。

Ruby on Railsのインストール

興味再燃。以前購入した入門書は訳がわからずに挫折したので、2ちゃんのRailsスレで最新のRailsに対応?していると紹介されていた入門書を購入。

Head First Rails ―頭とからだで覚えるRailsの基本

Head First Rails ―頭とからだで覚えるRailsの基本


この本には既にRailsがインストール済みの状態から書かれていたので、インストール方法をメモ。環境はWindows XPです。

続きを読む

Ruby 1.9で書いたスクリプトのexe化

ruby 1.9スクリプトをexe化するためのメモ

現在使用中のruby入手先

Ruby MSI Packagesで公開されている、Ruby-1.9.1-p429 (RI抜き) Microsoft Installter Package(2010/07/021 version 28523)
同じ場所にあるASR191(Ruby- 1.9.1用AddOn)も一緒にインストール

ocraの入手

exe化のツールとしてocraを使用(現時点のバージョンは1.1.3)

gem install ocra

exe化の方法

ocra --windows hello.rb

オプションの--windowsは、実行時にコマンドプロンプトを開かなくする。その他のオプションは、--helpにて確認のこと。

続きを読む

Rubyでコンパイラを作ってみる その2

関数を定義して使えるように拡張しました。
関数の引数とローカル変数はスタック上に置くので、それをアクセスする基準となるベースポインタと、関連するオペコードを追加。

続きを読む

Rubyでコンパイラを作ってみる

GWの時間を利用して勉強のために、Rubyを使って超簡易コンパイラを作ってみました。
ソースを読み込んで、仮想スタックマシンのアセンブラを出力します。
使用したRubyのバージョンは1.9.1、Windows環境で作成しています。

続きを読む

リファレンスマニュアル(chm版)の開き方

こちらで月一で更新されているマニュアルのchm版について、内容が表示されるはずの右ペインに
「Web ページへのナビゲーションは取り消されました」
と表示されて使用できない。何度かトライしたのですが、どうやらセキュリティ関係のブロックを外す処理が必要みたい。手順は以下のとおり

  1. ファイルのプロパティを開く
  2. 「全般」タブの一番したの「ブロックの解除」をクリック
  3. そのままOKでプロパティを閉じる


Web版はこちら
http://doc.okkez.net/

raccを試す その2

マニュアルページを参考にif文を追加してみる。

if expr [then] statement [else statement] end

追加したstatementには現状if文と式(expr)しか存在しない。
if文の文法は上記のようにトークンthenと、else節を省略可能にしてendで終了。条件式は0以外を真とする。else節がない場合はnilを返す、これに合わせてfooterの記述もnilが帰ったら文字列"nil"を表示するように変更。

? if 1 then 10 else 100 end     # 省略なしの文法
=> 10
? if 0 then 10 else 100 end
=> 100

? if 1 10 else 100 end          # thenを省略
=> 10
? if 0 10 else 100 end
=> 100

? if 1 10 end                   # else節を省略
=> 10
? if 0 10 end
=> nil

上手く行ってるみたいなのだけれども、生成の際に1件conflictが発生した

state 14 contains 1 shift/reduce conflicts

-------- Grammar --------

rule 1 target: statement
rule 2 target: 
rule 3 statement: if_stmt
rule 4 statement: expr
rule 5 if_stmt: IF expr then statement else END
rule 6 then: THEN
rule 7 then: 
rule 8 else: ELSE statement
rule 9 else: 
rule 10 expr: expr "+" expr
rule 11 expr: expr "-" expr
rule 12 expr: expr "*" expr
rule 13 expr: expr "/" expr
rule 14 expr: "(" expr ")"
rule 15 expr: "-" NUMBER
rule 16 expr: NUMBER
rule 17 expr: IDENT "=" expr
rule 18 expr: IDENT

中略

state 14

   5) if_stmt : IF expr _ then statement else END
  10) expr : expr _ "+" expr
  11) expr : expr _ "-" expr
  12) expr : expr _ "*" expr
  13) expr : expr _ "/" expr

  "*"           shift, and go to state 15
  "/"           shift, and go to state 16
  "+"           shift, and go to state 17
  "-"           shift, and go to state 18
  "-"           [reduce using rule 7 (then)]
  THEN          shift, and go to state 22
  $default      reduce using rule 7 (then)

  then          go to state 23

このconflictは、UMINUSの定義を消すとなくなるので、その部分に原因があるような気がします。でも、outputの出力はルール7でreduceできるよ、というもの。ルール7はthenの省略についての定義のはずなので、これが何で関係あるのかよく解からん。

続きを読む