Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Matzにっき(2004-04-26)
[go: Go Back, main page]

«前の日記(2004-04-25) 最新 次の日記(2004-04-27)» 編集

Matzにっき

<< 2004/04/ 1 1. April Fool's Day
2 1. Curlプログラミングエッセンシャルズ
2. 新人歓迎会
3 1. インターネットマガジン
4 1. 継続は力なり
5 1. SEの現場2004
2. Firebird日本ユーザー会
6 1. デジカメ(2)
7 1. CurlとAlph
8 1. 料理はプログラミングだ
9 1. 入学式
10 1. Code Reading
11 1. 復活祭
12 1. 日本オープンソース推進機構が活動を開始
13 1. 思わぬ検査
14 1. 誕生日
2. 新人研修
15 1. Linux Magazine
2. 「オープンソースエバンジェリストの盲点」?
16 1. 長男誕生日
17 1. 噂のGoogleの1GBメールサービス「Gmail」を最速レビュー!
2. 訓練集会
18 1. 観測問題
19 1. SCO問題
2. 沢山の目
20 1. オープンソースソフトウェア活用基盤整備事業ヒアリング
21 1. 26歳のハローワーク
22 1. 地域差を利用した生き方
23 1. yaccの弱点
24 1. また送別会
25 1. 倉吉支部大会
26 1. 掃除
2. yaccの弱点(その2)
27 1. 転職物語
2. yaccの弱点(その3)
28 1. “北風より太陽”によって米国でデジタルコンテンツとPCが栄える?
2. Babel
29 1. 引っ越し
30 1. テレビ
>>
Dr.Web 予測するアンチウイルス  Linux・FreeBSD・主要MTAに対応。まずは2ヶ月間無料でお試し。

2004-04-26 [長年日記]

_ [生活]掃除

新居の掃除、および諸事の片付け。ガスの点検、ウッドカーペットの搬入、BSアンテナの取りつけなど。 午前中いっぱいかかってしまった。しかし、それだけで疲れ切ってしまったぞ。

夜には契約関係の処理もすませる。いよいよ引っ越しの準備が整ってきた。

_ [OSS]yaccの弱点(その2)

yaccの宣言的な文法は条件が書けない。 「この条件のときはこのルールを適用しない」というような文法はありえない。

まあ、LALR(1)の性質を考えればある意味当然なので、これを弱点というのは適切ではない。 より正確には「弱点」ではなくて、せいぜい「要望」とか「欲求」とかだな。

とはいえ、 Rubyの文法には「ifなどの条件式には任意の式が書けるけどdoが来てはいけない」とか、 「メソッド引数には任意の式が書けるけどコンマを含んではいけない」のようなルールが存在する。 これに対応するためには、

  • すべてのルールを展開して、doが出現しうるものとdoが出現しないものの両方を用意する(コンマについても同様)。
  • lexerに手を回して予約語doに対して違うトークンを返すようにする。

前者はルールの数が増える(単純計算で4倍)ので、メンテナンスの手間がかかる。 一つのルールを修正するために、 常に4箇所(あるいはそれ以上)を更新する必要がある。あんまりだ。

現在のRubyの実装は後者を使っているのだが、 これもlexerとparserが無闇に強結合するため、メンテナンス性に問題がある。 また、yaccルールだけで文法が理解しにくいのも欠点だ。

私の知る限りでこんな無茶な要求に対応しているcompiler compilerは存在しない。

再帰下降の手書きparserなら、こんな挙動も簡単に実現できる。 「条件式フラグ」や「メソッド引数フラグ」を再帰関数の引き数のひとつに渡せば良い。 しかし、再帰下降parserもメンテしにくいことで知られているんだよなあ。

結局どれでもメンテしにくいんだったら、どれを選んでも同じってことかなあ。

本日のツッコミ(全2件) [ツッコミを入れる]
_ shiro (2004-04-27 08:08)

「C++はだめ」という条件に引っかかってしまうのでしょうけど、ANTLRは条件式を文法に混ぜて書けませんでしたっけ。トークンの無制限な先読みも出来て、LLの弱点をあまり感じなかった覚えがあります。

_ akr (2004-04-27 11:56)

inherited attribute と (ANTLR でいうところの) semantic predicates があればいいわけですよね。
ANTLR には両方ありますし、LR でも btyacc や zyacc にあります。
べつに無茶な要求だとは思いません。よくある機能なんじゃないかな。

お名前:
E-mail:
コメント:
本日のリンク元
アンテナ
検索

RSS feed meter for http://www.rubyist.net/~matz/ Creative Commons License This work is licensed under a Creative Commons License.