トップページ⇒tech
94コメント28KB

いやマジで、JavaCC すごすぎるって。語れ

■ このスレッドは過去ログ倉庫に格納されています
0001DasaniNGNG

【検索】キーワード「JAVACC」を探しました
http://makimo.to/cgi-bin/search/search.cgi?q=JavaCC&andor=AND&sf=2&H=&view=table&all=on&G=%8E%D0%89%EF

なんだこれ? こんなハイテクツールをなんでお前等語らないの?
JJTree とかと併用すれば最強だろーが!



↓から javacc 3.2 ダウンロードして早く使え。そして報告しる!
https://javacc.dev.java.net/servlets/ProjectDocumentList

JavaCC Documentation
http://trese.cs.utwente.nl/prototypes/composeJ/wichman/JavaCC/

ということで、 JavaCC の質問、使い方、技などなんでも OK です。
   ○
   人
   〉
0002DasaniNGNG
いや、マジで。みんな使おうよ。
「こんなに朝早くからアフォか」って言うかもしれんけど。。


JavaCCおもしろ〜〜〜い!
0003デフォルトの名無しさんNGNG
>>1

まだJavaとか使ってんの?
0004デフォルトの名無しさんNGNG
Javaはでかくて重くて嫌になってくる。
あと、exeが作れたらね〜
いいんだけど〜

4げっと?
0005DasaniNGNG
いや、そんなに言うほど重くないでしょ? どんだけ大きいソフト開発してんのよ?
中規模のプログラムだってサクサク動くよ。
それにツールもAPI も死ぬほどあるしね。
調べれば、必要なツールは過去にだれかがすでに作ってるっしょ。

とりあえずJavaCC の話ししよーよ。
0006デフォルトの名無しさんNGNG
重複なので削除依頼ヨロ

「コンパイラ・スクリプトエンジン」相談室 3
http://pc5.2ch.net/test/read.cgi/tech/1070089173/
0007DasaniNGNG

いや、重複じゃないでしょーが。
JavaCC だけで語ることありまくりだし、十分スレを消化できると思うよ。
0008デフォルトの名無しさんNGNG
その割にはあんた自身何も語ってないな
0009デフォルトの名無しさんNGNG
向こう過疎だし、乗っ取る形でいいから盛り上げてくれや
0010デフォルトの名無しさんNGNG
むしろ来ないで欲しい。こいつアフォそうだし。
コンパイラコンパイラ分かって無さそうだし。
0011DasaniNGNG

とりあえず、「JavaCCで日本語を扱う方法」は以下の URL で語られています。

http://www.ingrid.org/java/javacc/murata.html

でも、↑のはかなり古い情報だよね? 今でも同じようにしていけんの?

生成された *.jj ファイルの BNF グラマーは jjdoc で自動生成されます。
(これはかなりお得なのよ!!)
もうグラマー見放題だね!

jjtree は AST を使用してノードごとに処理を施したい時にかなり使えます。
オプション VISITOR=true にしておけば、ビジターインターフェースも
使用することができます。

ネ!
0012DasaniNGNG
>>10
> むしろ来ないで欲しい。こいつアフォそうだし。
> コンパイラコンパイラ分かって無さそうだし。

まあそんなわかってないけどね。あんたはどうなん?
なんか言語でも開発したんかい?
0013DasaniNGNG
グラマーうぷしろ(゚Д゚)ゴルァ
0014DasaniNGNG
日本語の文書見つけた。以下引用ね。(http://ltm.cs.uec.ac.jp/~takahisa/study/java_cc/grammar.html)

この文書は、WebGain内で公開されている「Description of the JavaCC Grammar File」
(http://www.webgain.com/products/java_cc/javaccgrm.html)
を邦訳したものです。

http://ltm.cs.uec.ac.jp/~takahisa/study/java_cc/grammar.html
0015デフォルトの名無しさんNGNG
******************
****          ****
****   終  了   ****
****          ****
******************
0016DasaniNGNG
やっぱ今に時間は人いないのかな。。。
起きたらにレスしてちょ。
みなたん
0017DasaniNGNG
ところで、>>11 で俺「BNF」って言ってるけど、実は EBNFね。
自動生成されたファイルのタイトルはBNFって言ってるけど。
0018デフォルトの名無しさんNGNG
なぜ今更スレがったのかいまいち理解できない流れだな
0019デフォルトの名無しさんNGNG
昔、JavaCC スレなかったっけ?
0020DasaniNGNG

いやー、また簡単なプログラミング言語作っちまったよー。

JavaCC は最高だな

0021DasaniNGNG
いやマジで、JavaCC すごすぎるなー。
みなたん?
0022デフォルトの名無しさんNGNG
生成されるコードがJavaということ以外で、yacc/bisonとの違いを書いてくれYO!
0023デフォルトの名無しさんNGNG
時に、「のったばしーしー」なる物を御存じか?
0024デフォルトの名無しさんNGNG
>>22
そもそも構文解析だけなのこれ?
それともこれ一つでflexとbisonのセットだと考えていいの?
0025DasaniNGNG
>>22
>>24

- yacc+bison は bottom-up LALR(1) パーシング アルゴリズムを使用する。
- javaCC は LL(k) (正確には LL(k) より強力)
⇒ 故に、 javaCC でのプログラムの方が人間に対しては理解しやすい。

- yacc は BNF 記述
- javaCC は EBNF 。
⇒ 故に javaCC プログラムのほうが読みやすい。

- javacc には jjtree が付いてくる
⇒ 故に、 AST は簡単に作成できる。

- javaCC の方が精密で、verbose なエラーメッセージをはく (かなり大事)

もっとあるけど、簡単にはこんなとこかな。
0026デフォルトの名無しさんNGNG
yacc+bisonって何?
二重構文解析?
0027DasaniNGNG
yacc/bison
0028デフォルトの名無しさんNGNG
>>24に対する返答が無いみたいなんだけど。
0029DasaniNGNG

わるーう゛ぃ。
そうそう、セットだよ。だから超ー楽よ。
0030DasaniNGNG

君達も使用してみたまえ。 気が狂うぞ!
   ○
   <)
   |
003123NGNG
やっぱし見事スルーだったんで一応リンク張ってみる。
"¬<><∪∪"
http://ne.cs.uec.ac.jp/~koto/notavacc/
んで、JavaCCとの違い。
http://ne.cs.uec.ac.jp/~koto/notavacc/diary.html#d030918
0032DasaniNGNG
>>31

その なんとか ってツールの作者は

(以下引用)
「しかしその代償として、JavaCC/JJTree では、人間のハンドリングなしに処理できる文
法はあまり多くありません。例えば次の文法を扱えません。

// BNF
expr ::= term
| expr "+" term

term ::= factor
| term "*" factor

factor ::= "(" expr ")"
| NUMBER
」

って言うけど、 JavaCC が left recursion (左再帰) を認めないのは
LL が top-down だからあたりまえでしょ? これは仕方ない。
プログラムを見やすくするためだもん。

んで、その作者は
「(拡張)BNFで記述できるものはなんでも扱えます。これは、Yacc が扱える文法よりも広範囲です。」
って言ってるけど、曖昧。 どの種類の CFG なのか教えてもらいたい。LR(k) ぐらいまでいくのかどうか

ごめん。なんか、俺にはそのツールの良さがみえなかった。
0033デフォルトの名無しさんNGNG
>>Dasani
なんかおまえいろいろ知ってんな
0034デフォルトの名無しさんNGNG
コンパイラの教科書に載ってる程度の事ばかりだと思うが…
0035DasaniNGNG

>>34
アホと他二人が書いた本か? あれはつまらなかった。死ぬかと思ったよ。
どうやったらあんなにつまらなく書けるのかが不思議でしょうがないね。
appelの本の方を勧めるよ
0036DasaniNGNG

しかし君達はつくづく JavaCC マンセーだな。
君達を見てるとこちらも楽しくなってくるよ。

って、いいから早く語れ。
0037DasaniNGNG

君達は今頃 JavaCC と (;´Д`)ハァハァ してるんだろうね。
まったく
0038デフォルトの名無しさんNGNG

コンパイルして多少速くなっても、メモリーのバカ喰いはどうにもならない。
0039デフォルトの名無しさんNGNG
↑?
0040DasaniNGNG


君達、今もJavaCCでオナっているのかい?
0041DasaniNGNG
そろそろみんな発言したくなってきたんじゃない?
いつでもいいよ。


みなたん。 早く語れよ
0042デフォルトの名無しさんNGNG
>>25
LLはLALRより遅い

EBNFは再帰定義の展開しなければならない分、手間がかかる
0043デフォルトの名無しさんNGNG
JavaCCで新たに言語を作る意義って何さ?

できあがった言語はJavaのようにVM上で動かすことができ
OSに対する依存性をさげることができる?
0044デフォルトの名無しさんNGNG
↑?
0045デフォルトの名無しさんNGNG
>>4
エクセルソフトから出てるジェットっての使えばjavaクラスからexeができる。
ちなみに、フリーソフトだ。たぶん。
0046デフォルトの名無しさんNGNG
JJTreeなら良く使うな。
0047デフォルトの名無しさんNGNG
>>1
おまえ高卒だろ。
大学でオートマトン習うからな。
アホ大学は教えないのか?

それはともかく、たいした話題じゃないんだよね。
OSに興味が無いのと同様に
そんな低レベル(アホって意味じゃない)な事に興味のある人なんて
少ないと思うけど。
0048デフォルトの名無しさんNGNG
5万次元の連立一次方程式を解くための
アルゴリズムでも勉強してこいよ。
0049デフォルトの名無しさんNGNG
>>48
5次元の連立1次方程式解くときと、どう違うですか?
0050デフォルトの名無しさんNGNG
left recursionが書けないのは痛すぎ。
使えねえな。
0051デフォルトの名無しさんNGNG
>>49
同じだと思ったら実装してみれ。
動かないから。
0052デフォルトの名無しさんNGNG
>>47
高卒だろ?と言いながらその直後でアフォ大学は教えないのか?
ってあんた分裂症?
0053デフォルトの名無しさんNGNG
>>52
お前すっごい馬鹿だな
0054デフォルトの名無しさんNGNG
>>53の方が馬鹿っぽい。
0055デフォルトの名無しさんNGNG
>>54モナー
0056デフォルトの名無しさんNGNG
Dasaniタソは今頃JavaCCでオナっているのかい?
0057デフォルトの名無しさんNGNG
sex しまつ
0058DasaniNGNG
Dasani さんが帰ってきまんこ

>>47
> >>1
> おまえ高卒だろ。
> 大学でオートマトン習うからな。
> アホ大学は教えないのか?

つーか別にオートマトンの話しなんかしてないし。
Lexical Analysis からオートマトンを無理矢理持ってきたい気持ちは
わかるがちょっと無理があったね!!

> それはともかく、たいした話題じゃないんだよね。

んじゃ何が「たいした話題」なんだよ。 何が P, NP, NPC に属し、NP = P か、SAT ∈ P か、
とか?

>>45
> >>4
> エクセルソフトから出てるジェットっての使えばjavaクラスからexeができる。
> ちなみに、フリーソフトだ。たぶん。

まだ使ってないけど、それ (・∀・)イイ んでない?でもそれフリーじゃないよ。
お試し版は60日で切れる

0059DasaniNGNG

しかし最近熟女にはまっちゃってさー

しかし、熟女はエロだよな。
0060DasaniNGNG
ageマン
0061デフォルトの名無しさんNGNG
javaccとjjtreeってどうやって使うの?
0062デフォルトの名無しさんNGNG
commons-jexlってjavacc使ってるみたいだけどさ、
リテラルすら日本語通さないんだな・・・。

あれって設定でなんとかなるもんなの?
0063DasaniNGNG
>>62
> commons-jexlってjavacc使ってるみたいだけどさ、
> リテラルすら日本語通さないんだな・・・。
>
> あれって設定でなんとかなるもんなの?

それがなんだか知らんが、ソースファイルに含まれてる
*.jjt かそれがなかったら *.jj を日本語処理できるように
直せば余裕
0064DowI ◆8.LPxIE7C6 NGNG
/* URLParser.jj その1 */

PARSER_BEGIN(URLParser)

public class URLParser{
}
PARSER_END(URLParser)


TOKEN : {
<LF: "\n"|"\r\n"> |
<LINK: ("http://"|"https://"|"ftp://")+(["\u0023","\u0025"-"\u0026","\u002d"-"\u003b","\u003d","\u003f"-"\u005a","\u005e"-"\u005f","\u0061"-"\u007a","\u007e"])+> |
<NOLINK1: (~["h", "f"]|["\u007f"-"\uffff"])+ > |
<NOLINK2: (["h", "f"])>
}

SKIP : {
<SPACE: " "|"\t"|"\r"|"\f">
}


void sentence() : {} {
(
try {
line()
} catch (Throwable th) {
error_skipto();
}
)+<EOF>
}

0065DowI ◆8.LPxIE7C6 NGNG
/* URLParser.jj その2 */

void line() : {} {
( link() | nolink() )* (lf())+
}
void link() : {
Token t;
}
{
t = <LINK> {
System.out.print("<a href=\"" + t.image + "\">" + t.image + "</a>");
}
}
void nolink() : {
Token t;
} {
(t=<NOLINK1>|t=<NOLINK2>) {
System.out.print(t.image);
}
}
void lf() : {
} {
<LF> {System.out.println("<LF>");}
}
JAVACODE
void error_skipto() {
Token t;
do {
t = getNextToken();
} while (t.kind != LF && t.kind != EOF);
}
0066DowI ◆8.LPxIE7C6 NGNG
1 名前:Dasani[] 投稿日:04/08/05 04:25

【検索】キーワード「JAVACC」を探しました
<a href="http://makimo.to/cgi-bin/search/search.cgi?q=JavaCC&andor=AND&sf=2&H=&view=table&all=on&G=%8E%D0%89%EF">http://makimo.to/cgi-bin/search/search.cgi?q=JavaCC&andor=AND&sf=2&H=&view=table&all=on&G=%8E%D0%89%EF<;/a>

なんだこれ? こんなハイテクツールをなんでお前等語らないの?
JJTree とかと併用すれば最強だろーが!



↓から javacc 3.2 ダウンロードして早く使え。そして報告しる!
<a href="https://javacc.dev.java.net/servlets/ProjectDocumentList">https://javacc.dev.java.net/servlets/ProjectDocumentList<;/a>

JavaCC Documentation
<a href="http://trese.cs.utwente.nl/prototypes/composeJ/wichman/JavaCC/">http://trese.cs.utwente.nl/prototypes/composeJ/wichman/JavaCC/<;/a>

ということで、 JavaCC の質問、使い方、技などなんでも OK です。
   ○
   人
   〉
0067DowI ◆8.LPxIE7C6 NGNG
だいぶ前に作ったやつだから、詳細は忘れちゃた。
正規表現とか、今見てもサッパリ分からない。
0068DowI ◆8.LPxIE7C6 NGNG
読み返してみると、なんだか難しい話しててびびった。
ググりっぱなしだった。

JavaCCで新しい言語なんてつくろうとは思わないけれど、パーサを作るときは便利。
こんな使い方もあるってことで。
0069デフォルトの名無しさんNGNG
そのくらい正規表現で(・∀・)イイんじゃね?
やっぱJavaはXMLじゃねーのけ?

ところでjjtreeのASTからトークンへの参照がまんどいね。
NODE_SCOPE_HOOKとかムンドクセ。
0070デフォルトの名無しさんNGNG
HtmlってBNFで表現できますか?
文法が曖昧なので厳しいと思うのですが。
0071デフォルトの名無しさんNGNG
>>70
書けることは書けるんじゃないの。
strictなhtmlだけで良いなら綺麗なBNFになるし、
汚いhtmlも扱うなら小汚いBNFになる。
007270NGNG
>>71
ありがとうございます。今、汚いhtmlも解析できるパーサーを作ろうとしています。
やっぱりLALRが使える他の処理系の方がいいですかね??
閉じるタグ<p></p>や閉じないタグ<br>、自分で閉じるタグ<br />とかが混在していることが予想されるのでかなり難しくないですか。
特にどのパスにも"<"が出現することが多いので、左再帰を許さないJavaCCだと厳しいかなと。
もちろん定石どおりの「左再帰の除去」もあるわけですが・・・。
0073デフォルトの名無しさんNGNG
>>72
JavaCC は LOOKAHEAD とか使えばなんでもアリなんで、
LALR でも手に負えない場合 JavaCC の方がいいかも。
とりあえず BNF で適当に書いてみて、
左再帰除去がどの程度必要かとか
LALRなら大丈夫そうかとか
見て決めるのがいいんじゃない?
007470NGNG
>>73
感謝です。そういえばJavaCCはLL(1)ではなくてLL(k)なんですよね。
頑張ってみます。ありがとうございました。
#最近JavaでCの処理系を作ったのですが、昔のCで書いていた頃がうそみたいですね。
#HashMapとかを最初から使えるので、恐ろしく楽に作れました。
0075デフォルトの名無しさん05/02/06 22:33:40
antlrとはどう違うの?
0076デフォルトの名無しさん05/02/07 17:26:46
そろそろ落ちそうなのでほしゅ(´・ω・)
0077デフォルトの名無しさん05/02/08 22:34:58
SableCCのがいいよ。LALR(1)だしTreeも自動でできる。
0078デフォルトの名無しさん05/02/09 19:07:27
プログラムの{}、()とか変数の切り出しはかんたんにできますか??
0079デフォルトの名無しさん05/02/16 05:09:51
できるけど grep で十分じゃね?
0080デフォルトの名無しさん2005/04/15(金) 21:57:10
これから勉強するんであげます。
0081デフォルトの名無しさん2005/04/20(水) 12:37:29
はりきりすぎなんじゃぼけが 氏ねや
0082デフォルトの名無しさん2005/04/29(金) 19:23:23
これ、超糞本
http://www.catnet.ne.jp/t-press/javacc.html
0083 2005/04/29(金) 21:38:50
>>82
どこらへんが駄目なの?
買おうかとおもったんだが。
0084デフォルトの名無しさん2005/08/30(火) 08:18:13
糞ってほどじゃないと思うが。

結構有用な情報がある。

ただ、書き方があんまり親切じゃない。
いきなりサンプルプログラムから始まってて、
入手方法とか、インストールの仕方とかは、説明してない。
そのあたりのことはだいたい自分で解決できる
(SourceForge とかJakartaプロジェクトなんかから自分でダウンロードして
 セットアップするようなことを何度もしたことがある)
という前提で書かれてるみたいなので、まったくの初心者にはきついかも。
(まあ、パーサジェネレータというもの自体、初心者が扱うようなもんじゃないけど。)

全体的に複雑な内容を複雑なままいちいち説明してると言う感じ。
他に類書が無いので、腰をすえてやるならそれなりに役に立つと思う。
仕事ですぐ使う、とか数日でマスターしたい、と思って読むと投げ出したくなるかも。
0085デフォルトの名無しさん2005/08/30(火) 08:23:35
ああ、付録になってた。 >入手、インストール方法
0086デフォルトの名無しさん2005/08/30(火) 08:54:38
質問です。

JavaCC 3.2 で、

---
PARSER_BEGIN(HelloWorld)
package hellojavacc;

〜中略〜
PARSER_END(HelloWorld)
---

として、javacc したのですが、生成されたファイルのうち、
SimpleCharStream.java、Token.java、TokenMgrError.java
には package 宣言が入っていません。
これらのファイルに他のファイル同様、package 宣言が入るようにするには、
どうしたらよいのでしょうか?
0087デフォルトの名無しさん2005/09/03(土) 15:54:05
yaccとかパーサー作るスレってないんですか?
0088デフォルトの名無しさん2005/09/03(土) 16:07:37
コンパイラ作るスレ
0089デフォルトの名無しさん2005/09/03(土) 19:19:14
コンパイラコンパイラを作るスレはないですか?
あるいはコンパイラコンパイラを作るためのコンパイラコンパイラコンパイラは存在しますか?
0090デフォルトの名無しさん2005/09/03(土) 21:35:00
それ発音が淀川っぽく見えちゃうのは俺だけ?
コンパイラッコンパイラッコンパイラッって言ってるべ?図星?
0091デフォルトの名無しさん2005/09/04(日) 15:24:04
>>87
http://pc8.2ch.net/test/read.cgi/tech/1115335709/
でいいと思う。
0092デフォルトの名無しさん2005/09/06(火) 01:47:12
yacc でパーサを作るってのと、yacc みたいなパーサ(ジェネレータ)作るスレ、
ではかなり意味が違うと思うが。
まあ、 >>91 のスレはなんでもありみたいだけど。
0093デフォルトの名無しさん2005/09/30(金) 08:32:52
>>87
スレじゃないけど、↓コンパイラつくるページ
http://catalog.compilertools.net/
0094デフォルトの名無しさん2005/09/30(金) 08:33:39
コンパイラ作る人のためのページ、だな。
■ このスレッドは過去ログ倉庫に格納されています