[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 06/07 23:41 / Filesize : 200 KB / Number-of Response : 866
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

『コンパイラ・スクリプトエンジン』 相談室 2



1 名前:nanashi de fault [02/05/12 02:05]
前スレ1より
>yaccやlexの使い方やら言語仕様やらの話題。

前スレ

【コンパイラ・スクリプトエンジン】相談室
pc.2ch.net/test/read.cgi/tech/981672957/

前スレアーカイブ(かちゅ用)
www.1me.jp/hp/prg_c-s_lab

前スレに張られたリンク + x
>>2-6

754 名前:デフォルトの名無しさん mailto:sage [03/06/13 21:49]
751は妄想が過ぎるんだよ

755 名前:751 [03/06/13 23:04]
>>753
宇宙のステルヴィアで使われているプログラミング言語です 多分 言語なのか怪しいけど

756 名前:デフォルトの名無しさん mailto:sage [03/06/13 23:23]
>>755
??????????????????????????????????????????????

757 名前:751 mailto:sage [03/06/13 23:33]
>>756
ごめんなさい、くだらないことなんで気にしないでください

758 名前:名無し@沢村 [03/06/16 20:46]
おまいらよ、脳内開発は終わったか?

759 名前:デフォルトの名無しさん mailto:sage [03/06/17 09:28]
>>751
ありゃ言語というより環境だろ。
>>752
笑えないから。

760 名前:デフォルトの名無しさん [03/07/10 19:28]
lex/yaccの宿題なのですが、ここで質問してもよいでしょうか?

761 名前:デフォルトの名無しさん [03/07/10 22:38]
>>760
丸投げはイヤンよ。

762 名前:デフォルトの名無しさん mailto:sage [03/07/10 22:46]
自作ファイラやエディタに言語を組み込みたいんだけど
どこかいい説明サイトないですか?



763 名前:デフォルトの名無しさん mailto:sage [03/07/11 00:47]
emacsのソース嫁

764 名前:デフォルトの名無しさん mailto:sage [03/07/11 01:05]
うーん、ここマジレスしていいとこなのか?

>>763
emacsは、特定のアプリケーションにLispが組み込んであるというより、
全体がLispシステムという構成でユーザにLisp環境を与えてるんだから
>>762向きじゃないだろう。

Tclを勉強するのがいいと思う。そもそも汎用の組み込み言語を目指して
発生したものだから。ラッキーなら>>762はTclをそのまま活用できるかも。

765 名前:764 mailto:sage [03/07/11 01:09]
>>764
組み込み用言語

言いたかったのは、券売機とか洗濯機とかNC機に組み込むソフトじゃなくて、
アプリケーションに組み込むソフトってことね。後者は何て言えばいいんだっけ?

766 名前:デフォルトの名無しさん mailto:sage [03/07/11 01:20]
アプリ組み込み用言語処理系

・・・ダサ

767 名前:760 mailto:sage [03/07/11 02:16]
それではお願いします
次の条件を満たすスタックマシンのオブジェクトコードを出力するコンパイラをlex/yaccを作成せよ。
・代入文のサポート
・if,if-else,whileのサポート
・入出力文のサポート
・ブロック構造体のサポート
・条件式のサポート
・固定変数のサポート
・int abc,xy[50];のような変数と配列の混在した宣言文が、何行でもファイルの先頭に書ける
・配列への代入、配列からの参照には、添字として数式が使える

という問題なのですが、下から2つの機能を除いたものは作ることができたのですが、
下の2つを追加するのにどこをいじればいいか全くわかりません。どなたかアドバイスお願いします。

768 名前:760 mailto:sage [03/07/11 02:17]
以下プログラムです
lex

%%
"+" return(ADDOP);
"-" return(SUBOP);
"*" return(MULOP);
"/" return(DVIOP);
"(" return(LPAR);
")" return(RPAR);
"=" return(ASSIGN);
";" return(SEMI);
"{" return(LLPAR);
"}" return(RRPAR);
"<" return(LLLPAR);
">" return(RRRPAR);
"<=" return(REB);
">=" return(LEB);
"==" return(EQ);
"!=" return(NEQ);
"if" return(IF);
"put" return(PUT);
"get" return(GET);
"else" return(ELSE);
"while" return(WHILE);
"'" return(AP);
"," return(CM);
[0-9]+ {sscanf(yytext,"%d",&yylval);return(NUMBER);}
[a-z] {yylval=yytext[0]-97;return(ALPHABET);}
[ \t\n]+ ;
. {yylval=yytext[0];return(CHARACTER);}
%%

769 名前:760 mailto:sage [03/07/11 02:24]
yacc-1

program :var_lists{kansu("INT",0,0);}
lists {table[0].q=hyo[number-1].add+hyo[number-1].size;
kansu("HL",0,0);for(i=0;i<codenum;i++){printf("%s %d%d\n",table[i].op,table[i].p,table[i].q);}}
;
var_lists :INT arrays SEMI
|var_lists KONMA INT arrays SEMI
;
arrays :var_decl{A=touroku(string);}
|arrays KONMA var_decl{A=touroku(string);}
;
var_decl:VARIABLE|VARIABLE KAKKO5 NUMBER KAKKO6;
var1 :/*empty*/{hyo[A].size=1;}
|KAKKO5 NUMBER KAKKO6{hyo[A].size=$2;}
;
lists :lists list
|list
;
list :VARIABLE{kansu("LA",0,sansyo(string));}
var2
ASSIGN expression SEMI{kansu("ST",0,0);}
|KAKKO3 lists KAKKO4
|if_prefix list{table[$1].q=codenum;}
|if_prefix list ELSE{$$=codenum;kansu("J",0,0);
table[$1].q=codenum;}
list{table[$4].q=codenum;}
|WHILE{$$=codenum;}
KAKKO1 condition KAKKO2{$$=codenum;kansu("FJ",0,0);}
list{kansu("J",0,$2);
table[$6].q=codenum;}

770 名前:760 mailto:sage [03/07/11 02:25]
yacc-2
|GET KAKKO1 VARIABLE{kansu("LA",0,sansyo(string));}
var2{kansu("RI",0,0);}
KAKKO2 SEMI
|SEMI
;
if_prefix:IF KAKKO1 condition KAKKO2{$$=codenum;kansu("FJ",0,0);}
condition:expression YORIDAI expression{kansu("GI",0,0);}
|expression IJO expression{kansu("GE",0,0);}
|expression MIMAN expression{kansu("LT",0,0);}
|expression IKA expression{kansu("LE",0,0);}
|expression ONAJI expression{kansu("EQ",0,0);}
|expression TIGAU expression{kansu("NE",0,0);}
;
put_list:put_list KONMA put_parm
|put_parm
;
put_parm:expression {kansu("WRI",0,0);kansu("WLN",0,0);}
|CHARACTER{kansu("LC",0,$1);kansu("WRC",0,0);kansu("WLN",0,0);}
;
expression:expression WA expression{kansu("AD",0,0);}
|expression SA expression{kansu("SB",0,0);}
|expression SEKI expression{kansu("ML",0,0);}
|expression SYO expression{kansu("DV",0,0);}
|SA expression %prec UMINUS{kansu("NEG",0,0);}
|KAKKO1 expression KAKKO2{$$=$2;}
|NUMBER{kansu("LC",0,$1);}
|VARIABLE{kansu("LA",0,sansyo(string));}
|VARIABLE{kansu("LA",0,sansyo(string));}
KAKKO5 expression KAKKO6{kansu("LI",0,0);}
;

771 名前:760 mailto:sage [03/07/11 02:28]
yacc-3
%%
#include "lex.yy.c"
struct{int address;char op[5];int p;int q;}table[100];
struct{char name[127];int soeji;int add;int size;}hyo[128];
int codenum=0;
int A,i,j;
void kansu(char x[], int y, int z){
strcpy(table[codenum].op,x);
table[codenum].p=y;
table[codenum].q=z;
codenum++;}
int number =0;
touroku(char a[]){
int b;
/*int c;
int start_add=0;*/
for(b=0;b<number;b++){
if(strcmp(hyo[b].name,a)==0){
printf("error\n");
return(NULL);}}
strcpy(hyo[number].name,a);
hyo[number].soeji=number;
hyo[number].add=hyo[number-1].add+hyo[number-1].size;
return(number++);}
sansyo(char d[]){
int e;
for(e=0;e<number;e++){
if(strcmp(hyo[e].name,d)==0){
return(hyo[e].add);}}
printf("no name\n");
return(NULL);}

772 名前:名無し mailto:sage [03/07/12 17:58]
www.experimentalstuff.com/Technologies/JavaCC/index.html
ここからJavaCCをDLしようとしても
The page you are looking for, /data/javacc-3.0.zip isn't here.
Sorry.
ってでてDLできないんですが



773 名前:デフォルトの名無しさん mailto:sage [03/07/12 22:25]
>>772
zipも、tar.gzも両方落とせるけど?

774 名前:名無し mailto:sage [03/07/13 00:23]
>>773
クッキーONにしたらDLできました

775 名前:デフォルトの名無しさん [03/07/13 05:23]
自己記述可能なオブジェクト指向の言語処理系で予約語や特殊記号の数が最小のものってどっかに転がってませんかね

776 名前:_ mailto:sage [03/07/13 05:25]
homepage.mac.com/hiroyuki44/

777 名前:デフォルトの名無しさん mailto:sage [03/07/13 12:51]
>>775
scheme

778 名前:通りすがり mailto:sage [03/07/14 07:23]
因みに何で760はスルーなんですか?

779 名前:通りすがりっていうか mailto:sage [03/07/14 07:24]
多分760をここに誘導した奴なんだけどね。

780 名前:デフォルトの名無しさん mailto:sage [03/07/14 11:45]
>>778
まずインデントをどうにかしてくれんと読む気にならん。
ぱっと見、文法をどうにかしろよって感じだが。

781 名前:山崎 渉 mailto:(^^) [03/07/15 09:51]

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

782 名前:デフォルトの名無しさん mailto:sage [03/07/17 13:25]
>>767
アクションは後回しにして、まず文法だけ集中して考えてみたら。
ふつうはまず文法だけで書いて動かしてみて、正しくreductionが行なわれるかを確認
しますよね。

var_lists :INT arrays SEMI
|var_lists KONMA INT arrays SEMI
;

これだと int v, int x; なんていうのが通ってしまうけど…
かなり混乱してます。もうちょっと整理しよう。



783 名前:760 mailto:sage [03/07/19 11:17]
>>782

レスありがとうございます

なんとか自分で解決できました

784 名前:デフォルトの名無しさん [03/07/19 11:51]
600番台は危険な香りがしたのであげ

785 名前:デフォルトの名無しさん [03/07/23 19:12]
初歩的な質問なんですけど字句解析の段階で
「どちらとも言えない」トークンが出てきた場合はどうすればいいのでしょうか?
例えば C の * は
1 * 2 のような乗算演算子なのか
*ptr -= 4 のようなデリファレンス演算子なのか
単純に字句解析だけしていくとわからないのです。

いくつか考えたのですが。
1.構文解析や意味解析から字句解析を呼び出すようにして、それらの処理内容を字句解析に使用する
2.TOKEN_ASTERISK のように中途半端な状態にして構文解析の段階で適切な物にする
3.とりあえず OP_MULTIPLY みたいにどっちかにしておいて、後で不適切だった場合に OP_DEREFERENCE など適切な物に置き換える
もしくは上記以外のもっと賢い方法があるのでしょうか?
よろしくお願いします。

786 名前:デフォルトの名無しさん mailto:sage [03/07/23 20:24]
>>785
1*2 の形の奴が単項演算子であるわけが無い。
*ptr の形の奴が2項演算子であるわけが無い。

よってどちらともいえないトークンではない

787 名前:デフォルトの名無しさん mailto:sage [03/07/23 20:39]
>>786
例が良くないだけで、問題は依然として解決していないと思うが?

MyClass::Member * a;

C++のこれは宣言?それとも乗算?

>>785
どれでもOK。標準はない。
俺だったら2を選ぶけど、それも参考程度にね。

788 名前:785 mailto:sage [03/07/23 22:40]
>>786 & >>787
レスありがとうございます。

もしかして私の「字句解析」っていう言葉への認識って間違ってるのかなと思っちゃったのですが、
字句解析って「字面からわかる範囲で」文字列をトークンに切り出していく作業だと思っていたのですが
前後のトークンの状態などまで見るべきものなのでしょうか?
つまり単項か2項かというのは前後のトークンがわからなければ決定できないと思うのですが
そういう所まで見るのが普通なのでしょうか?
(前のトークンはともかく、後のトークンまで判別に使うとするとかなり難しい事になりますよね)
一般論という感じでいいのですが、ご教授ください。
よろしくお願いします。

789 名前:デフォルトの名無しさん mailto:sage [03/07/23 22:55]
>>788
> 字句解析って「字面からわかる範囲で」文字列をトークンに切り出していく作業だと思っていたのですが
それであってる。

> 前後のトークンの状態などまで見るべきものなのでしょうか?
そうする処理系もある。
ただそれは、純粋に字句解析だけでなく、一部構文解析も含んだ処理ということになる。

> つまり単項か2項かというのは前後のトークンがわからなければ決定できないと思うのですが
> そういう所まで見るのが普通なのでしょうか?
これも処理系によりけりで、>>785のどれになるかはいろいろ。

字句解析と構文解析の境界は、厳密に分かれているとは限らない。
今みたいに曖昧な場合や、いっそ「字句+構文解析」をしてしまうこともある。
逆に、あらかじめ曖昧さが生じないように言語を設計する場合もある。

・・・あんまり役に立ってないな、俺。

まぁ、生きた例を知りたいなら、解析器や言語処理系のソースを読むのが一番。

790 名前:785 mailto:sage [03/07/23 23:43]
>>789
レスありがとうございます。
なるほど、厳密にパートを仕切る必要はないんですね。

>・・・あんまり役に立ってないな、俺。
そんな事ないです。日曜プログラムなので、周りに聞く人もいなくて
参考書籍とか雑誌とかもいくつか引っ張り出してきたりしてみたんですが、
疑問が出てきちゃったら正解かどうか確認する手段がないので、
こういう風に「それで間違いない」とか「それはこういう意味だよ」って答えてくれるだけで
とても助かります。ありがとうございました。


791 名前:ろうひ男爵 mailto:sage [03/07/24 07:53]
>>785
ラベルが
AAA:
の場合にも、字句解析で1文字先読みして":"まで確認するものが多いですしね。
じぶんも、2)の中途半端な物にしておきます。


792 名前:デフォルトの名無しさん mailto:sage [03/07/24 08:02]
C++パーサーとかjavaパーサー用の .l .yファイルってどこかで公開されてませんか?



793 名前:デフォルトの名無しさん [03/07/24 15:44]
>>785
C言語のパーサーの話なら、おたずねの * に関して字句解析が気にかける必要
はありません。それらの区別は構文解析の責任です。字句解析では'*' という
トークンを返せばそれで良いのです。

では字句解析はつねに文脈を気にしないで良いのかというとそうでもありません。

たとえばC のtypedef名は TYPEDEF_NAME というトークンを返さないと正しく
構文解析ができませんので、字句解析はidentifierを見たときに記号表を見て、
それがtypedef名として登録されているかどうかを調べなくてはいけません。
typedef名であれば TYPEDEF_NAME を、そうでなければ IDENTIFIER を返す
のです。

# 実はCの構文解析ではこの後さらに、TYPEDEF_NAMEを通常のidentifierとし
# て解釈するという処理もしなければならないのですが、初心者が混乱すると
# いけないのでこのへんでやめときます。


794 名前:デフォルトの名無しさん mailto:sage [03/07/25 02:53]
なぜおまえらLISPを使わんのだ

795 名前:デフォルトの名無しさん mailto:sage [03/07/25 03:04]
Lispを使うスレでないから

796 名前:デフォルトの名無しさん mailto:sage [03/07/25 06:35]
Lispはクソだから

797 名前:デフォルトの名無しさん mailto:sage [03/07/25 13:57]
括弧悪いから。

798 名前:デフォルトの名無しさん mailto:sage [03/07/25 19:32]
括弧(・∀・)イイ!

799 名前:ろうひ男爵 mailto:sage [03/07/25 21:14]
>>797
ワタラ。

800 名前:デフォルトの名無しさん mailto:sage [03/07/26 02:50]
>>799
激しく同意

801 名前:デフォルトの名無しさん mailto:sage [03/07/26 18:27]
おまえらLISPは柔軟だからコンパイラやアセンブラとかを
LISP自身で書けるんだぞ。そもそも記号処理は得意分野だからな。
CやJavaで組むより簡単だろう。
実装側の言語に頼る量も最小で済むんだぞ。
なぜ使わんのだ。

802 名前:デフォルトの名無しさん mailto:sage [03/07/26 18:28]
>>797
括弧悪い?アホか。
括弧の量なんて些細な事でしかない。



803 名前:デフォルトの名無しさん mailto:sage [03/07/27 08:34]
>>802
通じて無いよこの人

804 名前:デフォルトの名無しさん mailto:sage [03/07/27 14:24]
Lisp厨うぜぇ。
括弧読みにくいんだよ。
いつまでもマイナー言語でオナニーしてろよ、ボケ!

805 名前:デフォルトの名無しさん mailto:sage [03/07/27 15:47]

Lisp厨以上に厨さを醸し出す>804

コイツ、ウザッ

806 名前:デフォルトの名無しさん mailto:sage [03/07/28 07:32]
>>801
Lispじゃなくても、コンパイラやアセンブラはその言語自身でかけるが・・・

807 名前:デフォルトの名無しさん mailto:sage [03/07/28 07:32]
ああ、すまん。より簡単だといいたいわけね。

本当にそうなの?

808 名前:デフォルトの名無しさん [03/07/28 09:27]
字句解析についての質問なんですが、
自前でトークンを切り出すコード
(もし先頭がアルファベットならwhileで延々読み込みみたいな)の実行速度と
lexで吐き出すコードの実行速度ではどちらが早いんでしょうか?



809 名前:デフォルトの名無しさん mailto:sage [03/07/28 13:51]
実装次第

810 名前:棄教者 ◆egKIKYO7cg mailto:sage [03/07/28 14:50]
>>808
オートマ車とマニュアル車とどっちが燃費いいかという命題に似ている。

811 名前:デフォルトの名無しさん mailto:sage [03/07/28 18:24]
>>808 のような質問をする人間にはマトモな実装が出来るわけが無い、と仮定すると
lex の吐き出すコードのがマシと思われ。

812 名前:デフォルトの名無しさん mailto:sage [03/07/28 18:51]
>>811の誤りは、自明なことをあらためて仮定したこと。




813 名前:名無し@沢村 [03/07/28 20:47]
おまいらよ、コンパイラやスクリプトエンジンよりも、TVウェアをつくってみないか?

pc2.2ch.net/test/read.cgi/tech/1059262203/l50

814 名前:808 [03/07/28 21:53]
実装次第ですが・・・ありがとうございました。

初めてlexのコード見たんですが
移植する時間も自信も・・・なので諦めました・・・
メモリも全然使えない環境ですし・・・

815 名前:デフォルトの名無しさん [03/07/29 19:20]
>>814
綴りの認識程度ならlex(というかDFA)は大袈裟な気がする。

僕だったら、連続するアルファベットと数字を連結して単語にし、事前に作っ
ておいたハッシュ表を索いておしまいにします。
ハッシュ表は、完全ハッシュ関数を作成するツール(GNU gperf)を使えば、
かなり小さくできるし。


816 名前:デフォルトの名無しさん mailto:sage [03/07/29 23:49]
>>808
最初で、しかも簡単な物でしたら、手で作ってみるのもいいのではないでしょうか。
それからlexを覚えた方が理解が深まりますし。

817 名前:デフォルトの名無しさん mailto:sage [03/07/30 00:31]
手作りするより、早めにlexの使い方を覚えた方が
後々楽な気がするけど。
まあ、時間に余裕があるなら。

818 名前:デフォルトの名無しさん mailto:sage [03/07/30 12:19]
801 ではないが,Lisp の場合
字句解析 -> 不要
構文解析 -> すでに終わってる
なので激しく楽なのは間違いない.本の章一つで
Lisp のサブセットやそのコンパイラの作成法が載るくらい.

819 名前:デフォルトの名無しさん mailto:sage [03/07/30 23:08]
LISP Scheme Pert8テンプレより

Lisp 言語処理系: CAMPUS LIsP, Lemon version
ttp://aten.aial.hiroshima-u.ac.jp/~kakugawa/clisp/index-ja.shtml
Cコードによるわずか1000行の実装

ちなみにLispのマクロは字句解析と構文解析の間に作用するので、
別の言語のインタプリタをLisp上に作ることができる。
Paul GrahamのOn Lispという本(Web公開中)ではCommon Lisp上の
Prologインタプリタが解説されているし、
Richard Fateman教授のサイトには(おおっぴらには載せてないが)
Common Lisp上のMathematicaサブセットのインタプリタのソースが置いてある。
いずれもマクロを活用している。

おまけ bison, flexマニュアル和訳
ftp://ftp.ascii.co.jp/pub/GNU/

820 名前:デフォルトの名無しさん mailto:sage [03/07/31 12:43]
lisp厨は逝けよ。
lispのマクロで満足できるならこのスレには来るわけないんだからさ。


821 名前:デフォルトの名無しさん mailto:sage [03/07/31 18:04]
>>820
このスレで無駄に時間浪費した挙句、互換性のクソもない
コンパイラ・インタプリタなんぞ作って、いったい誰が使うのかな。

822 名前:デフォルトの名無しさん mailto:sage [03/07/31 19:01]
>>821
スレの存在そのものに疑義があるんなら立ち入ってくるなっつの。



823 名前:デフォルトの名無しさん mailto:sage [03/08/01 02:36]
>lispのマクロで満足できるならこのスレには来るわけないんだからさ。

lispのマクロを極めた人しかこんなことは言えないと思うのですが。

824 名前:デフォルトの名無しさん mailto:sage [03/08/01 03:05]
>>823
馬鹿だろ?
lispでマクロを極めようがどうしようが、んなことはフルスクラッチで
スクリプトエンジンを組みたい奴の欲求には答えられないっていってるの。
プロトタイプだけ作って満足するならともかく。
こういう場を読めないLispスノッブが大杉。


825 名前:デフォルトの名無しさん mailto:sage [03/08/01 03:46]
>>824
お前こそ馬鹿だろ?
lispのマクロがプロトタイプだけしか作れなくて
フルスクラッチの方がえらいみたいに考えてるところが。

826 名前:デフォルトの名無しさん mailto:sage [03/08/01 05:23]
824じゃないが

>> フルスクラッチの方がえらいみたいに考えてるところが。
> スクリプトエンジンを組みたい奴の欲求には答えられないっていってるの。

Lispでどんあ言語でも作ることができる何て言ってるヤシは、
Lispしかやったこと無いヤシ。

827 名前:デフォルトの名無しさん mailto:sage [03/08/01 05:46]
どんな言語でも大抵の言語は作れるよ

828 名前: mailto:sage [03/08/01 07:34]
flexで最後にマッチした文字列が入るyytextには'\0'は付加されるの?

guppy.eng.kagawa-u.ac.jp/~kagawa/1999/SysProg/both.html
では付加されないから注意が必要と書いてるけど

www.geocities.co.jp/SiliconValley-Oakland/3432/man/flex/flex-ja_4.html#SEC35
とかのサンプルみてるといきなりstrcpy(yylval.name,yytext)見たいな感じのコードがあるんだけど。
strcpyはソース側がNULL文字終端じゃないといけないよね。
それとも自分が何か勘違いしてるのかな?教えてください。

829 名前:デフォルトの名無しさん mailto:sage [03/08/01 11:39]
>>827
そりゃアセンブラでも作ることはできるだろう。
ようはどれだけ簡単に作ることができるかだ

830 名前:デフォルトの名無しさん mailto:sage [03/08/01 12:21]
>>828
というかこれにぶっ飛んだよ。

%union{
    char   name[128];
}


831 名前:デフォルトの名無しさん mailto:sage [03/08/01 13:29]
>>826
Lispスノッブ大杉って,漏れには数人しか見えないが….
コンパイラやスクリプトエンジン書くのに言語やツールなんか関係ねーだろう.
フルスクラッチがいいなら Lex も Yacc も使わずに全部手でかけばいいじゃん.


832 名前:デフォルトの名無しさん mailto:sage [03/08/01 14:00]
最近Schemeを勉強し始めたんだが、現時点での感想。

利点
- GCがあるので、メモリ管理が楽
- リストや木などを処理し易い
- S式を入出力する手続きが用意されている
    途中結果の出力や、個々の手続きの動作検証がし易い
- シンボル
    シンボルを使うとシンボルテーブルを新たに作らなくてもよいかもしれない。

欠点
- lexやyaccのようなデファクトスタンダードなツールがない
    guile絡みでLanguage Implementation Toolなるものがあるらしいが、
    どういう位置づけのものなのかは知らない。
- 動作が遅い
    ネイティブコードを吐くコンパイラもあり、速いらしい。
    それでも、チューニングをし出すとCとかで組んだ方が速くなると思う。
- マクロ
    Schemeは処理系によってマクロの書き方が違う。
- 資料が少ない
    検索しても見つかるのは、Schemeの処理系を作る話ばかり。
    On Lispに載っていたPrologインタプリタは、Prologの機能を
    マクロとかを使って実現するという話ぽかった。
    もしかしたら前の方の章にProlog→S式変換の話があったりするとか?



833 名前:832 mailto:sage [03/08/01 14:07]
まだ、Schemeではプログラムをあまり書いていないので、
先入観も含んじゃっています。

834 名前:828 mailto:sage [03/08/01 14:14]
>>830

すいません、まだ勉強始めたばっかりでなんでぶっ飛んだのかわかりません。
あとflexは自動的にヌル終端文字列にしてくれるんですか?

835 名前:デフォルトの名無しさん mailto:sage [03/08/01 14:21]
>>821
> 互換性のクソもないコンパイラ・インタプリタなんぞ作って、いったい誰が使うのかな。

このスレで書いてはならない事を書いたね。


836 名前:デフォルトの名無しさん mailto:sage [03/08/01 18:47]
ごめん

837 名前:デフォルトの名無しさん mailto:sage [03/08/01 18:55]
>>836
素直だ。

838 名前:デフォルトの名無しさん mailto:sage [03/08/01 19:00]
>>834
%unionってスタックの要素になるんだが、それを128byteとる豪儀(藁)さに。
終端はしないはず。

839 名前: mailto:sage [03/08/01 21:03]
>>838
おお、どうもありがとう。

840 名前:デフォルトの名無しさん mailto:sage [03/08/01 21:31]
すまん、されてるっぽいよ。

841 名前:デフォルトの名無しさん mailto:sage [03/08/01 23:52]
>>832 なんで Lisp 厨を刺激しそうなことを書くかね・・・。
とりあえず、フォローしておこう。ちょっと検索したけど Scheme 用の
LALR パーサジェネレータとかある。資料も英語なら本が何冊もオンライン
で読めるみたいだし。

842 名前:デフォルトの名無しさん mailto:sage [03/08/01 23:52]
>>832 なんで Lisp 厨を刺激しそうなことを書くかね・・・。
とりあえず、フォローしておこう。ちょっと検索したけど Scheme 用の
LALR パーサジェネレータとかある。資料も英語なら本が何冊もオンライン
で読めるみたいだし。



843 名前:841 mailto:sage [03/08/01 23:54]
うげ、なぜか二重カキコに。吊ってきます。

844 名前:山崎 渉 mailto:(^^)sage [03/08/02 02:12]
(^^)

845 名前:デフォルトの名無しさん [03/08/02 04:03]
逆アセンブラはスレ違いですか?

846 名前:デフォルトの名無しさん mailto:sage [03/08/07 22:30]
何でもいいからネタキボンヌ

847 名前:デフォルトの名無しさん mailto:sage [03/08/11 19:10]
七度文庫

848 名前:デフォルトの名無しさん [03/08/12 13:41]
ゲームキャラのAIをスクリプトで書けるようにしようと思っています。
JavaScriptを使おうとおもうのですが、組み込んで使えるものなのでしょうか?
VC6使っています。

849 名前:デフォルトの名無しさん mailto:sage [03/08/12 14:18]
>>848
ちょっと探したら、こんなのみつけたけど。

MozillaのJavaScriptのページ
jt.mozilla.gr.jp/js/

850 名前:デフォルトの名無しさん [03/08/12 17:20]
組み込み用途なら、JavaScriptとPerl、どっちがいいですか?

851 名前:デフォルトの名無しさん mailto:sage [03/08/12 20:28]
どっちもデカ過ぎるような…。コンパクトな自作言語のがよくないか?
まぁ、Python なんかは組み込まれてるの見かけるから漏れの感覚が古い
のやもしれず。

852 名前:850 [03/08/12 20:42]
Luaが小さくてよさげなのですが、明らかにJavaScriptやPerlと劣っている点はありますか?
小さいことは気にしないのですが、いざ使ってて大きな落とし穴に落ちたら人生いやけがさして多分漏れ自殺します。



853 名前:デフォルトの名無しさん mailto:sage [03/08/12 21:05]
が ・ ん ・ ば

854 名前:デフォルトの名無しさん mailto:sage [03/08/12 21:53]
LISPがいい

855 名前:デフォルトの名無しさん mailto:sage [03/08/13 04:00]
>>852
Luaは最初から組み込むことを前提に考えて作ったっぽいからいいかも。
ただ小さい代わりに言語仕様もライブラリも他と比べて貧弱なので。

856 名前:850 [03/08/13 11:23]
たしかに用意されているライブラリは少ない感じがします。
ただ、組み込み用途で使うのであれば、幾つかの型が扱えて
ifやwhileなどの制御構文が使えればOKかなぁ。。。
スクリプト側ではフロー制御みたいなことしかやらず、どうせ
アプリ側のAPI呼び出しに徹する形になるだろうから。

857 名前:デフォルトの名無しさん mailto:age [03/08/14 17:20]
JavaCC使っている人いる?

久しぶりにJavaCCを使おうと思ったら、antからビルド出来なくなっていた。
もちろん、コマンドラインからはjavaccもjjtreeも普通に使えている。
COM.sun.labs.javacc.Mainという存在しないクラスを探すのが原因らしく、
そこを"org.javacc.parser.Mainに書き換えただけで動いた。
sfに移動してから結構経っているのに、誰も気付かなかったのかな。

858 名前:山崎 渉 mailto:(^^) [03/08/15 15:24]
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

859 名前:デフォルトの名無しさん [03/08/16 18:29]
ほしゅっ

860 名前:デフォルトの名無しさん [03/08/19 21:52]
>>764
最近アルバイト先で使ったLSI設計ツール、Tclが組み込まれていた。
もちろん商用アプリなんだけど、Tclって商用利用に使ってもいいんですね。

いや、単に不勉強で、ちまたのスクリプトの何が商用利用(商品に組み込んだ
うえで販売)でき、何はだめなのか、よく知らなかったので、たまたまTclを
見つけて「へぇ、こういうふうに商品にもつかっているんだ」と、感心したという
だけの話なんですが。

861 名前:デフォルトの名無しさん mailto:ege [03/08/19 23:46]
おまえらの中で、boost::spiritを使ってる人いませんか?
どんな感じのものなのですか?



862 名前:デフォルトの名無しさん mailto:sage [03/08/20 05:43]
ガーベッジコレクションの話題はこのスレでいいのかな?



863 名前:デフォルトの名無しさん mailto:sage [03/08/20 06:19]
↑無関係ではないが、うーん、ちと違う気がするな。

864 名前:デフォルトの名無しさん mailto:sage [03/08/20 06:58]
>>862
LISP Schemeスレなら受け入れてくれると思うよ。
自作派が多いから。

865 名前:デフォルトの名無しさん mailto:sage [03/08/21 13:44]
>>861
下のサイト見るか、boost スレ行って訊けば?
ttp://www.fides.dti.ne.jp/~oka-t/cpplab-boost-spirit.html






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<200KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef