[表示 : 全て 最新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

700 名前:デフォルトの名無しさん mailto:sage [03/05/29 14:42]
>>699続き
入力にフォーム、出力はスタイルファイル(CSSでもXSLでも)とでもすれば偽IDE環境も簡単w。

またあるいは、かつてWEB(だっけ?今文献は引越しダンボールの中なんで)という
TeX+Pascalの文芸的プログラミングに憧れた人にもXMLマークアップでプログラミング言語というのは
それなりに面白い選択かと。

701 名前:デフォルトの名無しさん mailto:sage [03/05/29 17:52]
>>699
XMLなんてクソ

702 名前:名無し@沢村 [03/05/29 18:53]
>>698
コンソールアプリケーションって、たいがい起動したと同時に終了するだろ?

703 名前:名無し@沢村 [03/05/29 18:56]
>>698
てか、コンソールアプリケーションって、一応処理はするんだが、起動して処理をして終了までが、あっという間だから、起動したと同時に終了するように見えるんだな。

704 名前:デフォルトの名無しさん mailto:sage [03/05/29 19:25]
名無し@沢村はどんな『コンパイラ・スクリプトエンジン』を作っているのかな?

705 名前:デフォルトの名無しさん mailto:sage [03/05/29 19:43]
>>701
何故ぇ?w

706 名前:デフォルトの名無しさん mailto:sage [03/05/29 19:47]
>>702-703
( ´_ゝ`)


707 名前:デフォルトの名無しさん mailto:sage [03/05/29 20:58]
>>699
素から書いたら面倒だけどyacc/lexとかツール使うと工数はxmlと殆ど変わらないと思うけど。
むしろ切り出した後のエラーチェックとか加工とかがxmlだと面倒だなぁとか感じたりするんですけど。


708 名前:名無し@沢村 [03/05/29 21:01]
>>704
おれは、起動、コンパイル、実行、終了までが一瞬のうちに終わるスクリプト言語をつくったよ。
コンソールアプリケーションでね。



709 名前:デフォルトの名無しさん mailto:sage [03/05/29 21:03]
>>708
int main() {return 0;}
が実行できるスクリプトか?
すばらしい(藁)

710 名前:デフォルトの名無しさん mailto:sage [03/05/29 21:18]
Parrotでいいじゃんよ

711 名前:デフォルトの名無しさん mailto:sage [03/05/29 21:59]
>>707
エラーチェックはXML Schema + 検証機能つきパーサで。
切り出し&加工はDOMでやれば楽かも。

書ける言語がXML整形式の範囲に縛られるわけだから
なにがなんでもXMLとは思わないけど、文書としても利用されるような
宣言的なスクリプト(例えばモジュールの依存関係を記述するメイク・ファイルや
プロジェクトファイルみたいなのとか、環境設定とか、各種ポリシーの記述とか、
各種シーンの記述とか…。)にはいいかなと。

私自身はとあるTRPGのシナリオを記述する言語につかえる
語彙(XML世界におけるマークアップ文法のライブラリ)を
趣味で書いてみているところ。実行系はたぶんJavaで書くと思うけど。

712 名前:デフォルトの名無しさん mailto:sage [03/05/30 07:31]
行単位、スペース区切りでいいじゃん。


713 名前:デフォルトの名無しさん [03/05/30 10:57]
>>712
確かにそれが一番便利w
設定ファイルの読み込みや簡単なスクリプトでバッチ処理するときは最強。
しかし、より高機能なものを求めてコンパイラが欲しいのだから
そのような提案は無意味

714 名前:フォールトの名無しさん [03/05/30 11:33]
オブジェクト指向言語を作ってみたいのですが、良い教科書など
無いでしょうか?

一応、ドシロウトではなくて、括弧の使える四則演算電卓を作った
実績があります(C言語を用いて3ヶ月ほどで開発しました)。

その辺を踏まえて、オブジェクト指向言語の実装に関する、標準的
な書籍なりペーパーなりを紹介していただけないでしょうか?

また、このような自作言語に継続的な利用者が現れることを期待
するのですが、どのような場で、どの程度の進捗状況で発表すれ
ば良いのか見当がつきません。

成功した開発プロジェクトの実施スキームについて紹介していた
だけないでしょうか?

せっかく開発する予定の言語なので、できれば世界中の開発者に
使ってもらいたい、プログラミングの概念を根底から覆す提案を
したい、と言うのが私の願いです。


715 名前:デフォルトの名無しさん mailto:sage [03/05/30 12:06]
夢が大きくていいけどさ、まずは凝った作りじゃなくて、
もっと単純なコンパイラを練習として作ってみたら?
それならこのスレに情報もたくさんあるし。

716 名前:デフォルトの名無しさん mailto:sage [03/05/30 12:09]
>>714
がんがれ!!

717 名前:デフォルトの名無しさん mailto:sage [03/05/30 12:39]
>>714
Tiger本じゃだめ?

718 名前:フォールトの名無しさん [03/05/30 13:05]
>>717
>Tiger本じゃだめ?
ISBNコードわかります?




719 名前:デフォルトの名無しさん mailto:sage [03/05/30 13:13]
>>714
www.ruby-lang.org/ja/
ソース嫁

720 名前:フォールトの名無しさん [03/05/30 13:25]
>>717
Webで検索したらそれらしい本「ISBN 0-521-58388-8」
が見つかりましたが、洋書のため書店での入手が難しく、
あきらめざる得ません(トイレで読むのに丁度よさそうな
レベルの本なのに残念です)。

日本で入手容易な、翻訳本など無いでしょうか?

>>719
このプロジェクトが終了してからじっくり読んでみたいと
思います。


721 名前:デフォルトの名無しさん mailto:sage [03/05/30 13:35]
>プログラミングの概念を根底から覆す提案
って何かな?別にプログラミング言語でなくても、日本語でも表現できるはず。

722 名前:デフォルトの名無しさん mailto:sage [03/05/30 14:50]
>>718
著者のページ:
www.cs.princeton.edu/~appel/modern/

723 名前:デフォルトの名無しさん mailto:sage [03/05/30 14:52]
>>721
ま、そりゃそうだが、コードで語るってのもカコイイ


・・・かも知れないw。

724 名前:フォールトの名無しさん [03/05/30 16:32]
>>721

>>プログラミングの概念を根底から覆す提案
>って何かな?別にプログラミング言語でなくても、日本語でも表現できるはず。

まるで、具体的な計画を持たない香具師のように聞こえてしまう
じゃないか(はぁ)。。。この場で核心となるアイディアや
技術を披露するのは、未だ一寸早いと思う。私の考えに基づいた
言語仕様や実装方法が世間に受け入れられるためには、この
パラダイムギャップを埋めるための下地が不充分です。


725 名前:_ mailto:sage [03/05/30 16:33]
homepage.mac.com/hiroyuki43/hankaku06.html

726 名前:デフォルトの名無しさん mailto:sage [03/05/30 16:40]
>>724
と思うなら、まずプロトタイプでも作ってみるしかないんじゃないか。

727 名前:デフォルトの名無しさん mailto:sage [03/05/30 20:28]
>>724
どうせ、他に誰か1000人くらいは考えたことがある案だから気にするな。

728 名前:デフォルトの名無しさん mailto:sage [03/05/31 01:55]
FPGAの発想を応用して、VMを高速化



729 名前:デフォルトの名無しさん [03/05/31 18:20]
『システムソフトウェアプログラミング ― コンパイラの設計法と並行処理の基礎』
                         デイビッド クラーク (著)
ってのもあるぞ。個人的にはお世話になりました。

730 名前:デフォルトの名無しさん mailto:sage [03/05/31 18:24]
>>728
PS3

731 名前:ろうひ男爵 mailto:sage [03/06/05 02:06]
>>721
自分的には、
今後はHTのおかげで、ディスクトップレベルででも
16CPU(物理的ではなくね)とか実装される

その後、256CPUとか実装されて、
ソフトウェアによって4CPUとか使われるようになる。

オブジェクト指向でつくられたプログラムで、
オブジェクト単位でCPUが割り振られるとか。
(すでにやってそうですね)

732 名前:デフォルトの名無しさん mailto:sage [03/06/05 10:05]
>>731
> オブジェクト指向でつくられたプログラムで、
> オブジェクト単位でCPUが割り振られるとか。
CPU間のスイッチが多すぎて激しく遅くなりそうな。

733 名前:ろうひ男爵 mailto:sage [03/06/05 12:17]
>>732
メモリーもシェアメモリー部分だけ共有で、
1CPUあたり1GB位ずつ個別に持ってたりとか。
これ以上はすれ違いですね。スミマセン

734 名前:デフォルトの名無しさん [03/06/10 15:09]
lexの勉強をしています。
入力先の切り替えをするとき、
AT&T lexの場合は、input()とunput()を再定義する必要がありますが、
flexの場合、YY_INPUTの再定義だけで切り替えができます。
これは、flexが文字の返却をしないアルゴリズムで動作しているとのことでしょうか?

735 名前:直リン [03/06/10 15:13]
homepage.mac.com/yuuka20/

736 名前:デフォルトの名無しさん [03/06/10 18:34]
>>734
flexの実装については知らないけど、自前で文字バッファ持っていれば
unputはいらないでしょう。

lexical analyzerの本質からいって1文字先読みは避けられません。

737 名前:734 [03/06/10 19:42]
>>736
そうですよね。
YY_INPUTは、flex側のバッファに文字列をコピーして渡すから、
後はflexの内部バッファの問題になるでしょうね。

確かに文字の返却なしってのは無理かw

738 名前:デフォルトの名無しさん [03/06/10 23:48]
>>731
> オブジェクト指向でつくられたプログラムで、
> オブジェクト単位でCPUが割り振られるとか。

ここのJ3Cなんか近いかも?
www.nk.rim.or.jp/~jun/j3w/



739 名前:デフォルトの名無しさん [03/06/11 18:33]
yaccを使おうとしたら、liby.aがないことに気がつく。
どうしてyaccが入っているのにliby.aがないのかと小一時間・・・
findしてもどこにもないし・・・馬犬 目 ぽ..._〆(゚▽゚*)

740 名前:739 [03/06/11 19:01]
www.yuge.ac.jp/home/~nagao/teaching/Compiler/YaccLex/

> Linuxでは liby.a(Yacc用のダミーの yyerror,main)が提供されていません。
> そのため、自分で書く必要があります。

最初からないのね・・・

741 名前:100人に1人 mailto:age [03/06/11 19:16]
◎人の嫌がることをズケッと言うのはこんな奴!
<アスペルガー症候群(自閉症スペクトラム)←脳の機能的疾患(遺伝が要因)>
●変化を嫌う
web.kyoto-inet.or.jp/org/atoz3/kado/book1/Williams-Asp.htm

●接し方のルールがわからず無邪気に周囲の人に対して迷惑なことをしてしまうことがある。人を傷つけるということには鈍感(相手の立場に立って考えられない)。
●パターン的行動、生真面目すぎて融通が利かない
 毎朝の通学電車では同じホームの同じ場所から、同じ時間の同じ号車に乗ることに決めていたりする。パターンを好むということは反復を厭わないことでもある。
●アスペルガー症候群の子どもは(大人も)感覚刺激に対して敏感。敏感さは聴覚、視覚、味覚、嗅覚、温痛覚などのいずれの感覚の敏感さもありえる(特に視覚が敏感)。
●アスペルガー症候群の子ども(大人も)は予測できないことや変化に対して苦痛を感じることが多い。
www.autism.jp/l-02-03-aspe3.htm

●独り言を言うことが多い(考えていることを口に出す)
●物事をいつまでも同じにしておこうとする欲求が強く、そうでないと非常に不安。いわゆる「こだわり」。
●自発的に行動することが少なく、興味の幅が狭い
●物まねをしているような不自然な言語表現
●自閉症スペクトラム全体としては一万人に91人(およそ100人に1人)。
www.ypdc.net/asuperugar.htm

★自閉症スペクトラムの考え方(アスペルガーに至らない気質の偏りもある(遺伝性))
www.imaizumi-web.com/030413.html  
   
★アスペルガー症候群(自閉症スペクトラム)かどうかのテスト
twitwi.s10.xrea.com/psy/add.htm 
www.geocities.co.jp/Beautycare/5917/as/marksheetmake.html




742 名前:デフォルトの名無しさん mailto:sage [03/06/11 19:46]
>>740
liby.aは、あっても中身は無いも同然ですしね、昔は色々入っていたんでしょうか?
古いyaccを知っている人とかいるかな?

743 名前:名無し@沢村 [03/06/11 20:04]
コンパイラやスクリプトエンジンをつくろうとしているおまいらよ、夢を見るのはいいことだぞ!!
おまいらよ、いろいろコンパイラやスクリプトエンジンの構想を練ってみろ?
多いに夢を見てみろ?
そしてつかの間の自己満足にひたってみろ?
おまいらよ、夢を見るのはいいことだぞ!!


744 名前:デフォルトの名無しさん mailto:sage [03/06/11 20:26]
RubyとかC#とかF#とかMixJuiceとか、そんなレベルじゃない、
もっとぶっ飛んだ未来の言語はありませんか?(´・ω・`)

745 名前:デフォルトの名無しさん mailto:sage [03/06/11 20:43]
unlambdaとかは?<ぶっとんだ

746 名前:デフォルトの名無しさん mailto:sage [03/06/11 22:37]
ということは、BrainFuckもか?

747 名前:デフォルトの名無しさん mailto:sage [03/06/11 23:44]
別に普通だが

748 名前:デフォルトの名無しさん [03/06/12 00:19]
>>739
こんなもんだっけ?msgには\n含まれてたかな?忘れてしまったが。

int main(int argc, char **argv)
{
return yyparse();
}

int yyerror(char *msg)
{
fprintf(stderr, "%s\n", msg);
}

もっともこんな手抜きのmainやyyerrorはいずれ捨てることになるんだから、
はじめからちゃんと自分で書きましょう。




749 名前:デフォルトの名無しさん mailto:sage [03/06/12 00:26]
-Dyyparse=main -Dyyerror=abort

750 名前:739 [03/06/12 19:42]
>>748
liby.aは、740のリンク先から作成しますた。
確かに実用上は自分で書かないとだめぽ

ところで、lexにせよyaccにせよ、内部の挙動を考慮して使う必要があるのですね。
使い方を忘れると、訳が分からなくなりそう・・・

751 名前:デフォルトの名無しさん [03/06/12 19:49]
>>744
CPon

752 名前:751 [03/06/13 13:45]
俺が書きこんだスレっていっつもレスが少なくなるんだけどなんでだろ?

753 名前:デフォルトの名無しさん [03/06/13 21:40]
>>752
CPonって何? 

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
激しく同意






[ 続きを読む ] / [ 携帯版 ]

前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