history

青木日記 RSS

<前の日 | この月 | 次の日>

2007-03-22

Cflat (Java 版)

パーサジェネレータは悩んだすえに JavaCC + jjtree を使うことにした。

この記述の冗長さはどうにかしてほしい。 なんで nonterminal にカッコつけるんだよ?! "AST" + nonterminal 名がノード名っていう jjtree のデフォルトも気に入らねえし。 nonterminal のシンボルは小文字で始めさせてくれ。

値をとるときに val = って書くのもイマイチだよなあ。 肝心の規則が見づらくなる。俺としては二次元的に

<TERM> <TERM> <TERM>
a      b      c

って書くのがいいと思うんだ。

LL(k) はわりと便利。 でもやっぱ演算子優先順位の処理が面倒だな。

(12:44)

Cflat コンパイラ / Java (2)

~/c/stdcompiler/src % cat test1.cb
int
main(int argc, char **argv)
{
     printf("Hello, World!\n");
     return 0;
}
~/c/stdcompiler/src % java -classpath build/classes Compiler --dump-ast test1.cb
ToplevelNode
ListNode
ListNode
   DefunNode
    TypeNode
    FixedParamsNode
     SlotNode
      TypeNode
     SlotNode
      TypeNode
    ScopeNode
     ListNode
     BlockNode
      FuncallNode
       VariableNode
       ListNode
        StringLiteralNode
      ReturnNode
       IntegerLiteralNode

← いまココ

(16:26)

Cflat コンパイラ / Java (3)

しまった! 原稿レポジトリの下に入れてしまった。 cflat レポジトリに入れるべきだったな。

(16:28)

Cflat コンパイラ / Java (4)

やっぱ Ruby は偉大だ……。

(17:49)

本日のツッコミ(全2件) [ツッコミを入れる]
みずしま (2007-03-24 13:02)

こんにちは。

> なんで nonterminal にカッコつけるんだよ?!

一応理由はあって、nonterminalの呼び出し時に引数を渡すためなんですが、
ほとんどの場合、引数なんか渡さないんだから括弧は省略させてくれよ!と
思ったことはあります。

> 二次元的に
> <TERM> <TERM> <TERM>
> a b c
> って書くのがいいと思うんだ。

これだと逆に、nonterminalの定義を変更して、TERMを追加したりしたとき、
  <TERM> <NEWTERM> <TERM> <TERM>
  a b c d

のようにいちいちそれにあわせて名前の位置をずらさなきゃならないという
デメリットがあるので、どっちがいいかは一概には言えないような。

青木 (2007-03-31 07:41)

書くほうの手間をとるか、読むほうの手間をとるかによるでしょうね。わたしは読みやすければちょっとくらい書く手間が増えてもいいと思います。それに、規則を変えたらどうせアクションとかも変わるんだろうし、そんなところでせせこましくタイプ量を節約してもしかたないんじゃないですか。

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|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|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS