🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.implementation
Article #81

Re: language with yacc

#81
From: MAEDA Atusi/前田敦司
Date: Mon, 24 Feb 1997 00:00
49 lines
2581 bytes
JavaCCという,Javaを出力する構文(および字句)解析部生成系があるみたいで
す(http://www.suntest.com/JavaCC/ 旧称Jack).

こいつは LL(k) (for unbounded k) パーザを出力するのですが,LALR(1)と比
較した得失として,

* 表現力は同じである.
* LALR(1)で書けてLL(k)で使えないルールは左再帰だけだが,逆にLL(k)で書
   けてLALR(1)で書けないルールはたくさんある.
* 拡張BNFが使えるので,たいていの左再帰はもっと自然に繰り返しで書ける.
* top-down parserは,
   ・デバッグしやすい.
   ・non-terminalの混ざった構文木を出力できる.
   ・継承属性,合成属性の両方が使える.

と主張しています.

>>>>> "kono" == Shinji Kono <kono@ie.u-ryukyu.ac.jp> writes:
In article <4042.856603150@rananim.ie.u-ryukyu.ac.jp> kono@ie.u-ryukyu.ac.jp (Shinji Kono) writes:

    kono> 河野 真治@琉球大情報工学です。
    kono> In article <TAKUO.97Feb22170316@gryphon.jaist.ac.jp> , 
    kono> 	takuo@jaist.ac.jp (Takuo Watanabe) writes 

    takuo> たしかに再帰降下法は簡単でよいのですが,安直に文法を作って安直にコーディ
    takuo> ングするとすぐに左再帰でひっかかりますよね.もちろん文法をちょっと変換
    takuo> すれば解決するのですが,今度は書いたプログラムがえらくみにくくなってし
    takuo> まいます.

    kono> expr()
    kono> {
    kono>     term();
    kono>     while(last_token!=EOF) {
    kono>         case '*': 
    kono>             term(); 
    kono>             break; ...
    kono> みたいな形で書けば、特に、みにくくもなく左再帰はできます。と
    kono> いうか左再帰の方が一般的だから常にこの形で書くわけです。

JavaCCだと,
void Expr() : {}
{
     Term() (("+" | "-" | "*" | "/") Term() )* <EOF>
}

みたいに,繰り返しで書けるみたいです.

				前田敦司
Technical Details
Message-ID: <MAD.97Feb24231943@tanzanite.math.keio.ac.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <TAKUO.97Feb22170316@gryphon.jaist.ac.jp>

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: 10692b,a940e572f466c255
X-Google-Attributes: gid10692b,public
From: mad@math.keio.ac.jp (MAEDA Atusi/前田敦司)
Subject: Re: language with yacc
Date: 1997/02/24
Message-ID: <MAD.97Feb24231943@tanzanite.math.keio.ac.jp>
X-Deja-AN: 221064245
Sender: news@sync.cs.keio.ac.jp
References: <TAKUO.97Feb22170316@gryphon.jaist.ac.jp>
Content-Type: text/plain; charset=ISO-2022-JP
Organization: Faculty of Sci. and Tech., Keio Univ., Yokohama, Japan.
Mime-Version: 1.0 (generated by tm-edit 7.66)
Reply-To: mad@math.keio.ac.jp
Newsgroups: fj.lang.implementation