Hatena::ブログ(Diary)

はけの徒然日記 このページをアンテナに追加 RSSフィード

2005 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 04 | 05 | 08 | 09 | 10 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 |
2011 | 01 | 02 | 03 | 04 | 11 | 12 |
2012 | 02 | 03 | 05 |
2014 | 02 | 03 | 04 | 05 | 12 |
2015 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 04 | 05 | 08 | 09 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 |

2009-08-31(Mon)

2009-08-27(Thu)

Linux搭載のモバイルインターネットツール「NetWalker」


シャープも面白いもの出しますね。ネットブック全盛のご時世に年度内10万台はどう考えても無理ではないかと思いますが、どうなんでしょ?

個人的にはOpenOffce.orgがどの程度快適に動作するのかが気になるところです。あとバッテリが着脱不可なのと、キーが今ひとつっぽいのがマイナスポイントですか。

おもちゃとしてはお手頃な値段だと思うので、そっち方面で評判が良かったら買うかもしれません。

2009-08-14(Fri)

raccを試す その2.1

conflictの原因が全く分からない。とりあえずトークンthenの省略を付加にしたら出なくなった。

rule
  target: stmt
        | /* none */ { result = nil }

  stmt  : if_stmt
        | expr

  if_stmt:IF expr then else END
             { result = (val[1]!=0?val[2]:val[3]) }

  then   : THEN stmt       { result = val[1] }

  else   : ELSE stmt       { result = val[1] }
         | /* none */      { result = nil }

追記(09/08/19)

続きを読む

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の省略についての定義のはずなので、これが何で関係あるのかよく解からん。



続きを読む

2009-08-13(Thu)

夏への扉

夏への扉[新訳版]

夏への扉[新訳版]

旧版も持っていますが新訳版がでたと知り衝動買い。「文化女中機」が「おそうじガール」になった以外は概ね好感触です。作品自体読み返すのは数年ぶりだけれどやっぱり面白いです、名作ですな。


一九八四年[新訳版] (ハヤカワepi文庫)も新訳版が売られてましたが、どうしようか。

raccを試す

プログラミング言語を作るyaccという構文解析ツールの使い方についての簡単な解説が載っていました。使い方の雰囲気的は理解できたので、興味をもって検索していたらRubyにも似たようなraccというのがあるのを知り試してみました。

raccそのものは、Windows用のActiveScriptRubyに同梱されてました、サンプルはこちらから入手。calc.yの解説はこちらを参考にさせてもらいました。

とりあえず解説先とはちがうassignを定義しないで=を演算子で処理する方法で変数を使用できるようにしてみました。=を優先順位最低で右結合の演算子に定義、変数に値が代入されていない(@var[key]=nil)の場合はエラーを表示するように。

なんとなく上手くいってる模様です。

? a
Undefined Variable : a

? a=b=2
=> 2

? a
=> 2

? b
=> 2

? c=a+b*3-1
=> 7

続きを読む