いやマジで、JavaCC すごすぎるって。語れ
■ このスレッドは過去ログ倉庫に格納されています
0001Dasani
NGNG【検索】キーワード「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 です。
○
人
〉
0002Dasani
NGNG「こんなに朝早くからアフォか」って言うかもしれんけど。。
JavaCCおもしろ〜〜〜い!
0003デフォルトの名無しさん
NGNGまだJavaとか使ってんの?
0004デフォルトの名無しさん
NGNGあと、exeが作れたらね〜
いいんだけど〜
4げっと?
0005Dasani
NGNG中規模のプログラムだってサクサク動くよ。
それにツールもAPI も死ぬほどあるしね。
調べれば、必要なツールは過去にだれかがすでに作ってるっしょ。
とりあえずJavaCC の話ししよーよ。
0006デフォルトの名無しさん
NGNG「コンパイラ・スクリプトエンジン」相談室 3
http://pc5.2ch.net/test/read.cgi/tech/1070089173/
0007Dasani
NGNGいや、重複じゃないでしょーが。
JavaCC だけで語ることありまくりだし、十分スレを消化できると思うよ。
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNGコンパイラコンパイラ分かって無さそうだし。
0011Dasani
NGNGとりあえず、「JavaCCで日本語を扱う方法」は以下の URL で語られています。
http://www.ingrid.org/java/javacc/murata.html
でも、↑のはかなり古い情報だよね? 今でも同じようにしていけんの?
生成された *.jj ファイルの BNF グラマーは jjdoc で自動生成されます。
(これはかなりお得なのよ!!)
もうグラマー見放題だね!
jjtree は AST を使用してノードごとに処理を施したい時にかなり使えます。
オプション VISITOR=true にしておけば、ビジターインターフェースも
使用することができます。
ネ!
0012Dasani
NGNG> むしろ来ないで欲しい。こいつアフォそうだし。
> コンパイラコンパイラ分かって無さそうだし。
まあそんなわかってないけどね。あんたはどうなん?
なんか言語でも開発したんかい?
0013Dasani
NGNG0014Dasani
NGNGこの文書は、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**** ****
**** 終 了 ****
**** ****
******************
0016Dasani
NGNG起きたらにレスしてちょ。
みなたん
0017Dasani
NGNG自動生成されたファイルのタイトルはBNFって言ってるけど。
0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNG0020Dasani
NGNGいやー、また簡単なプログラミング言語作っちまったよー。
JavaCC は最高だな
0021Dasani
NGNGみなたん?
0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNGそもそも構文解析だけなのこれ?
それともこれ一つでflexとbisonのセットだと考えていいの?
0025Dasani
NGNG>>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二重構文解析?
0027Dasani
NGNG0028デフォルトの名無しさん
NGNG0029Dasani
NGNGわるーう゛ぃ。
そうそう、セットだよ。だから超ー楽よ。
0030Dasani
NGNG君達も使用してみたまえ。 気が狂うぞ!
○
<)
|
003123
NGNG"¬<><∪∪"
http://ne.cs.uec.ac.jp/~koto/notavacc/
んで、JavaCCとの違い。
http://ne.cs.uec.ac.jp/~koto/notavacc/diary.html#d030918
0032Dasani
NGNGその なんとか ってツールの作者は
(以下引用)
「しかしその代償として、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なんかおまえいろいろ知ってんな
0034デフォルトの名無しさん
NGNG0035Dasani
NGNG>>34
アホと他二人が書いた本か? あれはつまらなかった。死ぬかと思ったよ。
どうやったらあんなにつまらなく書けるのかが不思議でしょうがないね。
appelの本の方を勧めるよ
0036Dasani
NGNGしかし君達はつくづく JavaCC マンセーだな。
君達を見てるとこちらも楽しくなってくるよ。
って、いいから早く語れ。
0037Dasani
NGNG君達は今頃 JavaCC と (;´Д`)ハァハァ してるんだろうね。
まったく
0038デフォルトの名無しさん
NGNGコンパイルして多少速くなっても、メモリーのバカ喰いはどうにもならない。
0039デフォルトの名無しさん
NGNG0040Dasani
NGNG君達、今もJavaCCでオナっているのかい?
0041Dasani
NGNGいつでもいいよ。
みなたん。 早く語れよ
0042デフォルトの名無しさん
NGNGLLはLALRより遅い
EBNFは再帰定義の展開しなければならない分、手間がかかる
0043デフォルトの名無しさん
NGNGできあがった言語はJavaのようにVM上で動かすことができ
OSに対する依存性をさげることができる?
0044デフォルトの名無しさん
NGNG0045デフォルトの名無しさん
NGNGエクセルソフトから出てるジェットっての使えばjavaクラスからexeができる。
ちなみに、フリーソフトだ。たぶん。
0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNGおまえ高卒だろ。
大学でオートマトン習うからな。
アホ大学は教えないのか?
それはともかく、たいした話題じゃないんだよね。
OSに興味が無いのと同様に
そんな低レベル(アホって意味じゃない)な事に興味のある人なんて
少ないと思うけど。
0048デフォルトの名無しさん
NGNGアルゴリズムでも勉強してこいよ。
0049デフォルトの名無しさん
NGNG5次元の連立1次方程式解くときと、どう違うですか?
0050デフォルトの名無しさん
NGNG使えねえな。
0051デフォルトの名無しさん
NGNG同じだと思ったら実装してみれ。
動かないから。
0052デフォルトの名無しさん
NGNG高卒だろ?と言いながらその直後でアフォ大学は教えないのか?
ってあんた分裂症?
0053デフォルトの名無しさん
NGNGお前すっごい馬鹿だな
0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
NGNG0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNG0058Dasani
NGNG>>47
> >>1
> おまえ高卒だろ。
> 大学でオートマトン習うからな。
> アホ大学は教えないのか?
つーか別にオートマトンの話しなんかしてないし。
Lexical Analysis からオートマトンを無理矢理持ってきたい気持ちは
わかるがちょっと無理があったね!!
> それはともかく、たいした話題じゃないんだよね。
んじゃ何が「たいした話題」なんだよ。 何が P, NP, NPC に属し、NP = P か、SAT ∈ P か、
とか?
>>45
> >>4
> エクセルソフトから出てるジェットっての使えばjavaクラスからexeができる。
> ちなみに、フリーソフトだ。たぶん。
まだ使ってないけど、それ (・∀・)イイ んでない?でもそれフリーじゃないよ。
お試し版は60日で切れる
0059Dasani
NGNGしかし最近熟女にはまっちゃってさー
しかし、熟女はエロだよな。
0060Dasani
NGNG0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNGリテラルすら日本語通さないんだな・・・。
あれって設定でなんとかなるもんなの?
0063Dasani
NGNG> commons-jexlってjavacc使ってるみたいだけどさ、
> リテラルすら日本語通さないんだな・・・。
>
> あれって設定でなんとかなるもんなの?
それがなんだか知らんが、ソースファイルに含まれてる
*.jjt かそれがなかったら *.jj を日本語処理できるように
直せば余裕
0064DowI ◆8.LPxIE7C6
NGNGPARSER_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
NGNGvoid 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【検索】キーワード「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文法が曖昧なので厳しいと思うのですが。
0071デフォルトの名無しさん
NGNG書けることは書けるんじゃないの。
strictなhtmlだけで良いなら綺麗なBNFになるし、
汚いhtmlも扱うなら小汚いBNFになる。
007270
NGNGありがとうございます。今、汚いhtmlも解析できるパーサーを作ろうとしています。
やっぱりLALRが使える他の処理系の方がいいですかね??
閉じるタグ<p></p>や閉じないタグ<br>、自分で閉じるタグ<br />とかが混在していることが予想されるのでかなり難しくないですか。
特にどのパスにも"<"が出現することが多いので、左再帰を許さないJavaCCだと厳しいかなと。
もちろん定石どおりの「左再帰の除去」もあるわけですが・・・。
0073デフォルトの名無しさん
NGNGJavaCC は LOOKAHEAD とか使えばなんでもアリなんで、
LALR でも手に負えない場合 JavaCC の方がいいかも。
とりあえず BNF で適当に書いてみて、
左再帰除去がどの程度必要かとか
LALRなら大丈夫そうかとか
見て決めるのがいいんじゃない?
007470
NGNG感謝です。そういえばJavaCCはLL(1)ではなくてLL(k)なんですよね。
頑張ってみます。ありがとうございました。
#最近JavaでCの処理系を作ったのですが、昔のCで書いていた頃がうそみたいですね。
#HashMapとかを最初から使えるので、恐ろしく楽に作れました。
0075デフォルトの名無しさん
05/02/06 22:33:400076デフォルトの名無しさん
05/02/07 17:26:460077デフォルトの名無しさん
05/02/08 22:34:580078デフォルトの名無しさん
05/02/09 19:07:270079デフォルトの名無しさん
05/02/16 05:09:510080デフォルトの名無しさん
2005/04/15(金) 21:57:100081デフォルトの名無しさん
2005/04/20(水) 12:37:290082デフォルトの名無しさん
2005/04/29(金) 19:23:23http://www.catnet.ne.jp/t-press/javacc.html
どこらへんが駄目なの?
買おうかとおもったんだが。
0084デフォルトの名無しさん
2005/08/30(火) 08:18:13結構有用な情報がある。
ただ、書き方があんまり親切じゃない。
いきなりサンプルプログラムから始まってて、
入手方法とか、インストールの仕方とかは、説明してない。
そのあたりのことはだいたい自分で解決できる
(SourceForge とかJakartaプロジェクトなんかから自分でダウンロードして
セットアップするようなことを何度もしたことがある)
という前提で書かれてるみたいなので、まったくの初心者にはきついかも。
(まあ、パーサジェネレータというもの自体、初心者が扱うようなもんじゃないけど。)
全体的に複雑な内容を複雑なままいちいち説明してると言う感じ。
他に類書が無いので、腰をすえてやるならそれなりに役に立つと思う。
仕事ですぐ使う、とか数日でマスターしたい、と思って読むと投げ出したくなるかも。
0085デフォルトの名無しさん
2005/08/30(火) 08:23:350086デフォルトの名無しさん
2005/08/30(火) 08:54:38JavaCC 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:050088デフォルトの名無しさん
2005/09/03(土) 16:07:370089デフォルトの名無しさん
2005/09/03(土) 19:19:14あるいはコンパイラコンパイラを作るためのコンパイラコンパイラコンパイラは存在しますか?
0090デフォルトの名無しさん
2005/09/03(土) 21:35:00コンパイラッコンパイラッコンパイラッって言ってるべ?図星?
0091デフォルトの名無しさん
2005/09/04(日) 15:24:04http://pc8.2ch.net/test/read.cgi/tech/1115335709/
でいいと思う。
0092デフォルトの名無しさん
2005/09/06(火) 01:47:12ではかなり意味が違うと思うが。
まあ、 >>91 のスレはなんでもありみたいだけど。
0093デフォルトの名無しさん
2005/09/30(金) 08:32:52スレじゃないけど、↓コンパイラつくるページ
http://catalog.compilertools.net/
0094デフォルトの名無しさん
2005/09/30(金) 08:33:39■ このスレッドは過去ログ倉庫に格納されています