[前][次][番号順一覧][スレッド一覧][生データ]

langsmith:188

From: MAEDA Atusi <maeda-langsmith atusi.org>
Date: 12 Apr 2005 23:55:36 +0900
Subject: [langsmith:188] Re: 自作言語とパーサー

Yukihiro Matsumoto <matz ruby-lang.org> writes:

> | ただ、パーサジェネレーターは遅いというイメージがあります。
> | ANTLRのC#パーサーを使ってみたのですが...ちょっと重かった覚えがあります。
> | なんというか、 O(n^2)の臭いがしました。
> | ソースコードが長くなると、使い物にならなくなるのでは....?
> | もしかしたら、パーサというよりレクサ(?)の問題だったのかもしれません。
> 
> ANTLRは使ったことがないので分からないのですが、一般にyaccが
> 使っているLALRなどの構文解析でO(n^2)になるような要素はないと
> 思います。個人的な経験でもソースコードの量によって使い物にな
> らなかったことはないです。

yaccやbisonが生成するパーサの使うLALR(1)構文解析法は、人が手で書く時に
良く使うLL(1)より少し効率が良いと中田育男先生の「コンパイラ」(産業図書,
1981)にありました。

いずれも、オーダーはO(n)です。

実際、yaccやbisonが生成するパーザは、人が手で書くのと比べて劣らないく
らい速いと思います。

Shiro Kawai <shiro lava.net> writes:

> From: MORI Koichiro <kmori lsi-j.co.jp>
> Subject: [langsmith:185] Re: 自作言語とパーサー 
> Date: Tue, 12 Apr 2005 18:34:36 +0900
> 
> > というか、ソースコードの長さの自乗に比例するパーシングアルゴリズムって
> > 思いつきませんが。文法定義のサイズの自乗というのならわかりますが。
> 
> ナイーブな非決定性オートマトンで、バックトラックしまくるような文法を与えられると、
> 入力の自乗ってありそうな気もします。どうでしょう。
> 
> (「プログラミング言語の」パーザにはそんなものは使わないでしょうが)。
> 
> ANTLRはだいぶ昔に使った時はそんなに重く感じませんでしたが、確か
> あれはトークンの無限先読みが出来たと思うので、文法の作り方によっては
> えらく重くなることはあるかもしれません。

ANTLRが生成するのはLL(k)パーザですね(n >= 1)。

祖先のPCCTSはLL(k), k > 1の場合、バックトラックするO(n^k) のパーザを生
成することがあったそうですが、ANTLR は LL(k)の中でも O(nk) で近似でき
るサブセットだけを扱うそうです。

http://www.antlr.org/doc/glossary.html#Linear_approximate_lookahead

なので、オーダとしては線形のはずです。

また、ANTLRが生成する再帰下降lexerが遅いというのも本当のようです。
http://www.jguru.com/faq/view.jsp?EID=458474

				前田敦司

--
ML: langsmith quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       174 2005-04-11 15:58 [t.machida.unicom jco] langsmithへの参加願います。             
       175 2005-04-11 22:50 ┗[matz ruby-lang.org  ]                                       
       176 2005-04-12 10:28  ┗[t.machida.unicom jco] 自作言語とパーサー                  
       177 2005-04-12 11:08   ┣[shiro lava.net      ]                                   
       178 2005-04-12 11:54   ┃┗[t.machida.unicom jco]                                 
       180 2005-04-12 16:20   ┃ ┗[shiro lava.net      ]                               
       182 2005-04-12 18:07   ┃  ┗[t.machida.unicom jco]                             
       186 2005-04-12 20:08   ┃   ┗[shiro lava.net      ]                           
       179 2005-04-12 14:03   ┗[matz ruby-lang.org  ]                                   
       181 2005-04-12 17:45    ┗[t.machida.unicom jco]                                 
       183 2005-04-12 18:12     ┣[matz ruby-lang.org  ]                               
->     188 2005-04-12 23:55     ┃┗[maeda-langsmith atus]                             
       185 2005-04-12 18:34     ┗[kmori lsi-j.co.jp   ]                               
       187 2005-04-12 20:12      ┣[shiro lava.net      ]                             
       189 2005-04-13 10:02      ┗[t.machida.unicom jco]                             
       191 2005-04-13 13:45       ┗[kmori lsi-j.co.jp   ]                           
       192 2005-04-13 14:19        ┗[t.machida.unicom jco]