いや、マジで。みんな使おうよ。
「こんなに朝早くからアフォか」って言うかもしれんけど。。
JavaCCおもしろ〜〜〜い!
4 :
デフォルトの名無しさん:04/08/05 04:47
Javaはでかくて重くて嫌になってくる。
あと、exeが作れたらね〜
いいんだけど〜
4げっと?
いや、そんなに言うほど重くないでしょ? どんだけ大きいソフト開発してんのよ?
中規模のプログラムだってサクサク動くよ。
それにツールもAPI も死ぬほどあるしね。
調べれば、必要なツールは過去にだれかがすでに作ってるっしょ。
とりあえずJavaCC の話ししよーよ。
いや、重複じゃないでしょーが。
JavaCC だけで語ることありまくりだし、十分スレを消化できると思うよ。
その割にはあんた自身何も語ってないな
向こう過疎だし、乗っ取る形でいいから盛り上げてくれや
むしろ来ないで欲しい。こいつアフォそうだし。
コンパイラコンパイラ分かって無さそうだし。
11 :
Dasani:04/08/05 05:17
とりあえず、「JavaCCで日本語を扱う方法」は以下の URL で語られています。
http://www.ingrid.org/java/javacc/murata.html でも、↑のはかなり古い情報だよね? 今でも同じようにしていけんの?
生成された *.jj ファイルの BNF グラマーは jjdoc で自動生成されます。
(これはかなりお得なのよ!!)
もうグラマー見放題だね!
jjtree は AST を使用してノードごとに処理を施したい時にかなり使えます。
オプション VISITOR=true にしておけば、ビジターインターフェースも
使用することができます。
ネ!
12 :
Dasani:04/08/05 05:18
>>10 > むしろ来ないで欲しい。こいつアフォそうだし。
> コンパイラコンパイラ分かって無さそうだし。
まあそんなわかってないけどね。あんたはどうなん?
なんか言語でも開発したんかい?
13 :
Dasani:04/08/05 05:22
グラマーうぷしろ(゚Д゚)ゴルァ
14 :
Dasani:04/08/05 05:25
******************
**** ****
**** 終 了 ****
**** ****
******************
16 :
Dasani:04/08/05 05:41
やっぱ今に時間は人いないのかな。。。
起きたらにレスしてちょ。
みなたん
17 :
Dasani:04/08/05 05:58
ところで、
>>11 で俺「BNF」って言ってるけど、実は EBNFね。
自動生成されたファイルのタイトルはBNFって言ってるけど。
なぜ今更スレがったのかいまいち理解できない流れだな
昔、JavaCC スレなかったっけ?
20 :
Dasani:04/08/05 15:58
いやー、また簡単なプログラミング言語作っちまったよー。
JavaCC は最高だな
21 :
Dasani:04/08/05 17:44
いやマジで、JavaCC すごすぎるなー。
みなたん?
生成されるコードがJavaということ以外で、yacc/bisonとの違いを書いてくれYO!
時に、「のったばしーしー」なる物を御存じか?
>>22 そもそも構文解析だけなのこれ?
それともこれ一つでflexとbisonのセットだと考えていいの?
25 :
Dasani:04/08/05 18:26
>>22 >>24 - yacc+bison は bottom-up LALR(1) パーシング アルゴリズムを使用する。
- javaCC は LL(k) (正確には LL(k) より強力)
⇒ 故に、 javaCC でのプログラムの方が人間に対しては理解しやすい。
- yacc は BNF 記述
- javaCC は EBNF 。
⇒ 故に javaCC プログラムのほうが読みやすい。
- javacc には jjtree が付いてくる
⇒ 故に、 AST は簡単に作成できる。
- javaCC の方が精密で、verbose なエラーメッセージをはく (かなり大事)
もっとあるけど、簡単にはこんなとこかな。
yacc+bisonって何?
二重構文解析?
27 :
Dasani:04/08/05 18:40
yacc/bison
29 :
Dasani:04/08/05 18:44
わるーう゛ぃ。
そうそう、セットだよ。だから超ー楽よ。
30 :
Dasani:04/08/05 18:45
君達も使用してみたまえ。 気が狂うぞ!
○
<)
|
32 :
Dasani:04/08/05 19:22
>>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) ぐらいまでいくのかどうか
ごめん。なんか、俺にはそのツールの良さがみえなかった。
>>Dasani
なんかおまえいろいろ知ってんな
コンパイラの教科書に載ってる程度の事ばかりだと思うが…
35 :
Dasani:04/08/05 19:43
>>34 アホと他二人が書いた本か? あれはつまらなかった。死ぬかと思ったよ。
どうやったらあんなにつまらなく書けるのかが不思議でしょうがないね。
appelの本の方を勧めるよ
36 :
Dasani:04/08/05 19:49
しかし君達はつくづく JavaCC マンセーだな。
君達を見てるとこちらも楽しくなってくるよ。
って、いいから早く語れ。
37 :
Dasani:04/08/05 19:53
君達は今頃 JavaCC と (;´Д`)ハァハァ してるんだろうね。
まったく
コンパイルして多少速くなっても、メモリーのバカ喰いはどうにもならない。
↑?
40 :
Dasani:04/08/06 15:38
君達、今もJavaCCでオナっているのかい?
41 :
Dasani:04/08/06 16:44
そろそろみんな発言したくなってきたんじゃない?
いつでもいいよ。
みなたん。 早く語れよ
>>25 LLはLALRより遅い
EBNFは再帰定義の展開しなければならない分、手間がかかる
43 :
デフォルトの名無しさん:04/08/06 18:23
JavaCCで新たに言語を作る意義って何さ?
できあがった言語はJavaのようにVM上で動かすことができ
OSに対する依存性をさげることができる?
↑?
45 :
デフォルトの名無しさん:04/08/10 00:43
>>4 エクセルソフトから出てるジェットっての使えばjavaクラスからexeができる。
ちなみに、フリーソフトだ。たぶん。
46 :
デフォルトの名無しさん:04/08/10 01:12
JJTreeなら良く使うな。
47 :
デフォルトの名無しさん:04/08/10 01:21
>>1 おまえ高卒だろ。
大学でオートマトン習うからな。
アホ大学は教えないのか?
それはともかく、たいした話題じゃないんだよね。
OSに興味が無いのと同様に
そんな低レベル(アホって意味じゃない)な事に興味のある人なんて
少ないと思うけど。
48 :
デフォルトの名無しさん:04/08/10 01:22
5万次元の連立一次方程式を解くための
アルゴリズムでも勉強してこいよ。
>>48 5次元の連立1次方程式解くときと、どう違うですか?
50 :
デフォルトの名無しさん:04/08/10 08:48
left recursionが書けないのは痛すぎ。
使えねえな。
51 :
デフォルトの名無しさん:04/08/10 11:10
>>49 同じだと思ったら実装してみれ。
動かないから。
>>47 高卒だろ?と言いながらその直後でアフォ大学は教えないのか?
ってあんた分裂症?
Dasaniタソは今頃JavaCCでオナっているのかい?
57 :
デフォルトの名無しさん:04/08/19 15:59
sex しまつ
58 :
Dasani:04/08/23 23:32
Dasani さんが帰ってきまんこ
>>47 >
>>1 > おまえ高卒だろ。
> 大学でオートマトン習うからな。
> アホ大学は教えないのか?
つーか別にオートマトンの話しなんかしてないし。
Lexical Analysis からオートマトンを無理矢理持ってきたい気持ちは
わかるがちょっと無理があったね!!
> それはともかく、たいした話題じゃないんだよね。
んじゃ何が「たいした話題」なんだよ。 何が P, NP, NPC に属し、NP = P か、SAT ∈ P か、
とか?
>>45 >
>>4 > エクセルソフトから出てるジェットっての使えばjavaクラスからexeができる。
> ちなみに、フリーソフトだ。たぶん。
まだ使ってないけど、それ (・∀・)イイ んでない?でもそれフリーじゃないよ。
お試し版は60日で切れる
59 :
Dasani:04/08/23 23:35
しかし最近熟女にはまっちゃってさー
しかし、熟女はエロだよな。
60 :
Dasani:04/08/24 19:47
ageマン
javaccとjjtreeってどうやって使うの?
62 :
デフォルトの名無しさん:04/09/01 01:04
commons-jexlってjavacc使ってるみたいだけどさ、
リテラルすら日本語通さないんだな・・・。
あれって設定でなんとかなるもんなの?
63 :
Dasani:04/09/02 18:12
>>62 > commons-jexlってjavacc使ってるみたいだけどさ、
> リテラルすら日本語通さないんだな・・・。
>
> あれって設定でなんとかなるもんなの?
それがなんだか知らんが、ソースファイルに含まれてる
*.jjt かそれがなかったら *.jj を日本語処理できるように
直せば余裕
/* 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>
}
/* 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);
}
だいぶ前に作ったやつだから、詳細は忘れちゃた。
正規表現とか、今見てもサッパリ分からない。
読み返してみると、なんだか難しい話しててびびった。
ググりっぱなしだった。
JavaCCで新しい言語なんてつくろうとは思わないけれど、パーサを作るときは便利。
こんな使い方もあるってことで。
そのくらい正規表現で(・∀・)イイんじゃね?
やっぱJavaはXMLじゃねーのけ?
ところでjjtreeのASTからトークンへの参照がまんどいね。
NODE_SCOPE_HOOKとかムンドクセ。
HtmlってBNFで表現できますか?
文法が曖昧なので厳しいと思うのですが。
>>70 書けることは書けるんじゃないの。
strictなhtmlだけで良いなら綺麗なBNFになるし、
汚いhtmlも扱うなら小汚いBNFになる。
>>71 ありがとうございます。今、汚いhtmlも解析できるパーサーを作ろうとしています。
やっぱりLALRが使える他の処理系の方がいいですかね??
閉じるタグ<p></p>や閉じないタグ<br>、自分で閉じるタグ<br />とかが混在していることが予想されるのでかなり難しくないですか。
特にどのパスにも"<"が出現することが多いので、左再帰を許さないJavaCCだと厳しいかなと。
もちろん定石どおりの「左再帰の除去」もあるわけですが・・・。
>>72 JavaCC は LOOKAHEAD とか使えばなんでもアリなんで、
LALR でも手に負えない場合 JavaCC の方がいいかも。
とりあえず BNF で適当に書いてみて、
左再帰除去がどの程度必要かとか
LALRなら大丈夫そうかとか
見て決めるのがいいんじゃない?
>>73 感謝です。そういえばJavaCCはLL(1)ではなくてLL(k)なんですよね。
頑張ってみます。ありがとうございました。
#最近JavaでCの処理系を作ったのですが、昔のCで書いていた頃がうそみたいですね。
#HashMapとかを最初から使えるので、恐ろしく楽に作れました。
antlrとはどう違うの?
76 :
デフォルトの名無しさん:05/02/07 17:26:46
そろそろ落ちそうなのでほしゅ(´・ω・)
SableCCのがいいよ。LALR(1)だしTreeも自動でできる。
78 :
デフォルトの名無しさん:05/02/09 19:07:27
プログラムの{}、()とか変数の切り出しはかんたんにできますか??
できるけど grep で十分じゃね?
80 :
デフォルトの名無しさん:2005/04/15(金) 21:57:10
これから勉強するんであげます。
はりきりすぎなんじゃぼけが 氏ねや
82 :
デフォルトの名無しさん:2005/04/29(金) 19:23:23
83 :
:2005/04/29(金) 21:38:50
>>82 どこらへんが駄目なの?
買おうかとおもったんだが。
糞ってほどじゃないと思うが。
結構有用な情報がある。
ただ、書き方があんまり親切じゃない。
いきなりサンプルプログラムから始まってて、
入手方法とか、インストールの仕方とかは、説明してない。
そのあたりのことはだいたい自分で解決できる
(SourceForge とかJakartaプロジェクトなんかから自分でダウンロードして
セットアップするようなことを何度もしたことがある)
という前提で書かれてるみたいなので、まったくの初心者にはきついかも。
(まあ、パーサジェネレータというもの自体、初心者が扱うようなもんじゃないけど。)
全体的に複雑な内容を複雑なままいちいち説明してると言う感じ。
他に類書が無いので、腰をすえてやるならそれなりに役に立つと思う。
仕事ですぐ使う、とか数日でマスターしたい、と思って読むと投げ出したくなるかも。
ああ、付録になってた。 >入手、インストール方法
86 :
デフォルトの名無しさん: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 宣言が入るようにするには、
どうしたらよいのでしょうか?
yaccとかパーサー作るスレってないんですか?
コンパイラ作るスレ
コンパイラコンパイラを作るスレはないですか?
あるいはコンパイラコンパイラを作るためのコンパイラコンパイラコンパイラは存在しますか?
それ発音が淀川っぽく見えちゃうのは俺だけ?
コンパイラッコンパイラッコンパイラッって言ってるべ?図星?
yacc でパーサを作るってのと、yacc みたいなパーサ(ジェネレータ)作るスレ、
ではかなり意味が違うと思うが。
まあ、
>>91 のスレはなんでもありみたいだけど。
コンパイラ作る人のためのページ、だな。