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


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

「コンパイラ・スクリプトエンジン」相談室 3



1 名前:デフォルトの名無しさん [03/11/29 15:59]
yaccやlexの使い方やら言語仕様やらの話題。

前スレ
1 pc.2ch.net/tech/kako/981/981672957.html
2 pc2.2ch.net/test/read.cgi/tech/1021136715/ (dat落ち)

関連リンクは多分 >>2-8 あたり

830 名前:デフォルトの名無しさん mailto:sage [04/08/03 17:27]
>>791
yyinを指定しないと入力が標準入力になるからそうなるのでしょう

831 名前:デフォルトの名無しさん mailto:sage [04/08/03 17:55]
yyworld

832 名前:デフォルトの名無しさん [04/08/06 23:12]
>>829
一応あるみたいです。

やはり、ドラゴンを理解しないと
shift/reduce & reduce/reduce の衝突を完全回避することは難しいですかね?


833 名前:デフォルトの名無しさん [04/08/06 23:13]
在庫だと思われます。↑


834 名前:デフォルトの名無しさん [04/08/09 23:38]
注文してしまった。


835 名前:デフォルトの名無しさん [04/08/30 00:46]
age!



836 名前:デフォルトの名無しさん [04/08/30 14:29]
「コンパイラ構成法」の原田賢一氏の研究室のサイトが見つかりません。
移転したんでしょうか?
どなたか、ブックマークつけてらっしゃる方います?

コンパイラ構成法のソースコードをゲットしたいんですが。

837 名前:デフォルトの名無しさん mailto:sage [04/09/01 10:01]
う〜ん。名前空間の実装法がわからん。
だれか、参考になるサイトか書籍、知らないか?

クラス定義と同じ方法で良いのかなぁ?

838 名前:デフォルトの名無しさん mailto:sage [04/09/01 10:32]
>>837
シンボルテーブルのスタックを作ればいいだけじゃないか?



839 名前:デフォルトの名無しさん mailto:sage [04/09/01 13:55]
>>838
>シンボルテーブルのスタックを作ればいいだけじゃないか?

それってディスプレイ・・・・・だよねぇ。
ブロックを開くときに名前を覚えておくようにするんだろうか?

840 名前:デフォルトの名無しさん mailto:sage [04/09/01 19:40]
例えばC++には複数の名前空間があってややこしい

キーワード
演算子
プリプロセッサ

変数
namespace

これらは関係を持ったりするしね
まあプリプロセッサを除いて基本はみな同じだけど

841 名前:デフォルトの名無しさん mailto:sage [04/09/01 19:42]
名前空間は
関数 namespace クラス
だけじゃないのか?

842 名前:デフォルトの名無しさん mailto:sage [04/09/01 19:46]
::、using、export、importが絡むとさらに複雑になる

843 名前:デフォルトの名無しさん mailto:sage [04/09/01 19:57]
:: using は簡単
export importはどうだろ

844 名前:デフォルトの名無しさん mailto:sage [04/09/01 20:24]
>>840
何を持って基本というか知らんが、実装しようと思うと namespace は深いぞ。
ADL と関数テンプレートとか。

845 名前:デフォルトの名無しさん mailto:sage [04/09/03 18:29]
所詮 namespace は、バカ避けの機能。

優秀なコンパイラ屋が血反吐を吐きながら実装するものの、
それによって実行速度が向上する訳も無く・・・

そもそも優秀なプログラマならば、最初から namespace など
必要としない確固としたコーディングスタイルを身に着けている。

そしてバカなプログラマは、せっかく実装してもらった機能の
使い方自体が分からない。バカは所詮バカ。

namespace って、一体何の為にあるんだろう・・・


846 名前:デフォルトの名無しさん mailto:sage [04/09/03 18:50]
↑ホームラン級のバカ

847 名前:デフォルトの名無しさん mailto:sage [04/09/03 19:24]
所詮 型 は、バカ避けの機能。

優秀なコンパイラ屋が血反吐を吐きながら実装するものの、
それによって実行速度が向上する訳も無く・・・

そもそも優秀なプログラマならば、最初から 型 など
必要としない確固としたコーディングスタイルを身に着けている。

そしてバカなプログラマは、せっかく実装してもらった機能の
使い方自体が分からない。バカは所詮バカ。

型 って、一体何の為にあるんだろう・・・


848 名前:デフォルトの名無しさん mailto:sage [04/09/03 20:04]
ダウト。残念ながら、型によって実行速度は上がるんだよ。




849 名前:デフォルトの名無しさん mailto:sage [04/09/03 20:15]
いくらなんでも型は重要だろう。

850 名前:デフォルトの名無しさん mailto:sage [04/09/03 20:16]
>>845
評価尺度が実行速度だけとは……。1960 年代の人間ですかい?

851 名前:デフォルトの名無しさん mailto:sage [04/09/03 21:23]
60年代だったら消費メモリも重要だな。

852 名前:デフォルトの名無しさん [04/09/04 01:00]
所詮「コンパイラ・スクリプトエンジン」相談室 は、バカ避けのスレ。

優秀なプログラマが血反吐を吐きながら回答するものの、
それによって理解が向上する訳も無く・・・

そもそも優秀なプログラマならば、最初からこのスレ など
必要としない確固とした技術を身に着けている。

そしてバカなプログラマは、せっかく回答してもらった説明の
内容自体が分からない。バカは所詮バカ。

このスレって、一体何の為にあるんだろう・・・

853 名前:デフォルトの名無しさん mailto:sage [04/09/04 01:01]
>>852
ワラタ

854 名前:マイク ◆yrBrqfF1Ew mailto:sage [04/09/04 01:22]
namespaceは最高だな。
感動もんだ。

855 名前:デフォルトの名無しさん mailto:sage [04/09/04 11:21]
>>852
無理してまで回答は僕もしないし、他の人もしてないんじゃない。
コンパイラやスクリプトを作ろうという人口は少ないから過疎なのは仕方が無いが
僕は日ごろから巡回しているし、このスレ向きの質問書けば回答は帰ってくるよ。
もちろん僕もクレクレ君とOO厨房の言語論争的な話題は放置してるけどね。;-P
キミには分らないかもしれないが機能しいてない掲示板ではないよ、
進行が遅いに加えて近頃アホっぽい話題が充満しているだけだ。

856 名前:デフォルトの名無しさん mailto:age [04/09/04 12:52]
>>855
( д ) ゚ ゚

857 名前:デフォルトの名無しさん mailto:sage [04/09/04 16:13]
ひさびさにコピペにマジレス見た・・・

858 名前:デフォルトの名無しさん mailto:sage [04/09/04 16:48]
型の実装について教えてください。
現在 int のみのコンパイラは作れたのですが
float などを追加しようとすると例えばスクリプト中の変数に型情報を持たせて
実行するときに int か float か if で判断するしか無いのでしょうか?
2つならまだしも double とか char を追加するとなると代入するとき等の型判定で
組み合わせの爆発が起きそうなのですがなにか良い方法はないでしょうか?
速度的に。



859 名前:デフォルトの名無しさん mailto:sage [04/09/04 17:02]
テーブル作るか int float を別文法にしてしまうか……
てか、こんな事は自分で考えろ。

860 名前:デフォルトの名無しさん mailto:sage [04/09/04 17:07]
>>858
>現在 int のみのコンパイラは作れたのですが
>float などを追加しようとすると例えばスクリプト中の変数に型情報を持たせて
>実行するときに int か float か if で判断するしか無いのでしょうか?

って、そんなのコンパイル出来たって言えないやん。。。
何の為の型なのさ?


861 名前:デフォルトの名無しさん mailto:sage [04/09/04 17:11]
変数に型情報があってコンパイラを作っているのなら、
コンパイルの時点で型にあったコードを生成するだけだろ。
実行時じゃなくて。


862 名前:デフォルトの名無しさん mailto:sage [04/09/04 17:12]
>>860 ハァ

863 名前:デフォルトの名無しさん mailto:sage [04/09/04 18:27]
>>860
バカ避けの機能

864 名前:デフォルトの名無しさん mailto:sage [04/09/04 18:59]
>>859-861
おぼろげながら自分の間違いが分かってきました。
どうもです。

もう少し考えてみます。

865 名前:デフォルトの名無しさん mailto:sage [04/09/04 20:09]
>>858
実行時に型チェックするかコンパイル時に型チェックするかは、言語の設計に
大きく関わってくるけど、まぁどっちでも良い。

コンパイル時に型チェックしたければ、たとえば Yacc 風に書くと

IDENT '=' experssion:
  {
    // まず IDENT が変数名であることを確認
    // 次に experssion の型が IDENT の型に変換できることを確認
    // 型変換して代入するコードを生成
  }
  ;

ってな感じ。型変換判定は素直に実装すると型の数の 2 乗のオーダーで増えるが、
テーブルにでも書いておけば大した手間ではない。ベタに if - else とかで書くと死ぬ。

866 名前:デフォルトの名無しさん [04/09/04 21:46]
YACC はバカ避けのソフト。


867 名前:デフォルトの名無しさん mailto:sage [04/09/04 22:46]
作ってて楽しけりゃなんだっていい

868 名前:デフォルトの名無しさん mailto:sage [04/09/05 06:46]
( ゚д゚)、ペッ



869 名前:デフォルトの名無しさん mailto:sage [04/09/05 15:32]
型についてはシンボルテーブルで管理すれば良いでしょ。

シンボル表のエントリに型情報をもたせ、それが基本型を
ポイントすることで、個々のシンボルの型を表現します。
struct や class などの基本型をまとめた型を作るときも
シンボル表にそれらの新しい型のエントリを作って、基本型を
リスト状にポイントしていけばよいです。

870 名前:デフォルトの名無しさん [04/09/05 17:16]
所詮 lex は、バカ避けのソフト。
(以下ry


871 名前:デフォルトの名無しさん mailto:sage [04/09/05 17:47]
>>855
wrota

872 名前:デフォルトの名無しさん mailto:sage [04/09/05 19:51]
>>870-871
意味の無いレスいれるの止めてくんない、近頃こんなレスばっかりで
前後の見通しが悪くてかなわないんだよ、邪魔だから適当な言語死滅スレにでもいってくれ。

873 名前:デフォルトの名無しさん mailto:sage [04/09/05 20:08]
その発言は結局荒れるもとになるよ。
そして、大量に無駄な情報のなかから有用なものを抜き出すのが2chの利用法だと思う。

874 名前:デフォルトの名無しさん mailto:sage [04/09/05 20:12]
過疎スレでやってくれるなよなとは思う

875 名前:デフォルトの名無しさん mailto:sage [04/09/07 17:20]
855=872

876 名前:デフォルトの名無しさん [04/09/13 23:46:35]
>>872
お前のレスこそ余計。


877 名前:デフォルトの名無しさん [04/09/13 23:47:49]
>>872
wrota

878 名前:デフォルトの名無しさん mailto:sage [04/09/14 18:08:01]
876=877
wrota書くのに一分もかかってんじゃねーよ。




879 名前:デフォルトの名無しさん [04/09/14 23:04:15]
>>878
!= だが何か?


880 名前:デフォルトの名無しさん mailto:sage [04/09/14 23:09:55]
3日後

870 名前:デフォルトの名無しさん 投稿日:あぼーん
あぼーん

871 名前:デフォルトの名無しさん 投稿日:あぼーん
あぼーん

872 名前:デフォルトの名無しさん 投稿日:あぼーん
あぼーん

〜略〜

879 名前:デフォルトの名無しさん 投稿日:あぼーん
あぼーん

880 名前:デフォルトの名無しさん 投稿日:あぼーん
あぼーん



何のためのスレなんだか


881 名前:デフォルトの名無しさん mailto:sage [04/09/14 23:28:47]
なんか恐ろしく自己中なヤツがいるようですが…

882 名前:デフォルトの名無しさん [04/09/15 00:36:49]
名前もあぼーんになるはずだが

883 名前:デフォルトの名無しさん mailto:sage [04/09/15 01:04:33]
このスレ869までしか表示されないな。

884 名前:デフォルトの名無しさん [04/09/15 22:07:01]
まぁ、もしアボーンされるとしても、
>>880 が最初だろw


885 名前:デフォルトの名無しさん [04/09/20 01:53:27]
gccの&&label(Labels as Values)みたいな機能を実現するには、
ラベルは相対じゃなくて、絶対アドレスを取得しなきゃならんのだよね。

void *ptr = &&label;
goto *ptr;
label:

の場合は

// void *ptr = &&label;
mov DWORD PTR[ebp-04h], label_EA

// goto *ptr;
mov eax, DWORD PTR[ebp-04h]
jmp eax

label:

こんな感じかな?
でも

なんで
goto ptr;
じゃないんだろう?
ptrと
*ptr
は何を指すのか
はて。。。

886 名前:デフォルトの名無しさん [04/09/20 03:29:47]
できたできた。
どうやら型をvoid*にしたのはgccの気まぐれらしい。
ラベルの型なんてないからねえ。

int ptr = &&label;
goto ptr;

これだとラベルと区別つかないからvoid*にしただけか。
gccは変な構文ばっかだな。

887 名前:デフォルトの名無しさん mailto:sage [04/09/29 19:53:22]
VC++でflex++/bison++でリンカエラー回避できますか?

888 名前:デフォルトの名無しさん [04/09/30 22:56:07]
アフォはスルーされるという典型例だなw




889 名前:デフォルトの名無しさん [04/10/05 23:30:22]
C++、Javaで同じスクリプトを動かしたいんですが、
自作するしかないでしょうか。
LuaがJavaに対応していれば一番いいんですが。

890 名前:デフォルトの名無しさん mailto:sage [04/10/06 00:42:29]
>>889
Schemeとか、どっちでも使える言語も結構ある。

891 名前:デフォルトの名無しさん mailto:sage [04/10/06 00:57:17]
そういう意味ではLISP系探すと強いね。
とりあえずS式が読めればなんでもいいわけだし。

892 名前:デフォルトの名無しさん mailto:sage [04/10/06 10:39:52]
>>889
TCLとか


893 名前:デフォルトの名無しさん mailto:sage [04/10/06 12:59:19]
>>889
JavaSript というか ECMAScript がいいんじゃない?
簡単だし。

894 名前:デフォルトの名無しさん mailto:sage [04/10/06 18:10:12]
みんな自分が使っているのを薦めている予感。

895 名前:デフォルトの名無しさん [04/10/06 21:08:06]
bashスクリプトがイイと思うよ。


896 名前:889 mailto:sage [04/10/06 21:33:47]
どうもです。
その辺りのキーワードを頼りに探してみます。
ありがとうございました。

897 名前:デフォルトの名無しさん mailto:sage [04/10/06 22:50:27]
とりあえずECMAScript(の実装)が簡単だという意見が本気でわからん

898 名前:デフォルトの名無しさん mailto:sage [04/10/06 22:53:42]
LISPは1000行も書けばそこそこ使えるものができる
Javaだともっと短いかも



899 名前:デフォルトの名無しさん mailto:sage [04/10/06 23:04:05]
>>897
>C++、Javaで同じスクリプトを動かしたいんですが、
>自作するしかないでしょうか。

って質問だったので、C++とJava での実装が容易に利用できる ECMAScript を勧めました。


900 名前:デフォルトの名無しさん mailto:sage [04/10/06 23:14:01]
ECMA Scriptだと、MozillaのSpiderMonkeyとRhinoが
良さそうだね。

901 名前:デフォルトの名無しさん mailto:sage [04/10/06 23:28:14]
Pythonは?

902 名前:デフォルトの名無しさん mailto:sage [04/10/06 23:31:24]
>>901
ぴちょん(・∀・)!


903 名前:デフォルトの名無しさん mailto:sage [04/10/08 08:18:15]
ネイティブコンパイルする処理系を作成中です

904 名前:デフォルトの名無しさん mailto:sage [04/10/09 09:13:05]
完成です

905 名前:デフォルトの名無しさん mailto:sage [04/10/09 14:51:55]
じりじり

906 名前:デフォルトの名無しさん mailto:sage [04/10/09 16:05:06]
>>904
晒せ


907 名前:デフォルトの名無しさん [04/10/09 22:31:21]
処理系のテストってみなさんどうしてますか
構文、演算子ごとに全パターン網羅できてますか?
ある組み合わせで不具合が出る可能性もあるから、
どうがんばっても全部網羅したとはいえませんよね
某スレのD言語なんかろくにテストされてないのがまるわかりですし
ある程度テストパターンの自動作成ができればよいのですが
そういうアイデアで何かありませんか?


908 名前:デフォルトの名無しさん [04/10/09 23:31:27]
例えばifが構文のキーワードならif + 1のような並びは構文エラーとなるべきですが、
こういうのはyaccを使った場合も含めてエラーとなることは予測できたとしても
実際にエラーになることの検証まではされていないのが現状だと思います。
これは言語処理系に限った話ではないですが、予測の付かないユーザーの
ランダムな入力に対し、はたして適切な処理をしているのかどうか?を検証する
確立された方法はあるのでしょうか?

test_if_branch() {
int x;

x = 0;
if (x) x = 2;
test_assert(x==0);

x = 1;
if (x) x = 2;
test_assert(x==2);

x = 0;
if (x) x = 2;
else x = 3;
test_assert(x==3);

x = 1;
if (x) x = 2;
else x = 3;
test_assert(x==2);

}
こんなものを延々と記述していくしかないのでしょうか。



909 名前:デフォルトの名無しさん mailto:sage [04/10/10 15:30:32]
>>907
全部網羅って C∞ のテストをしたいって事?

910 名前:デフォルトの名無しさん [04/10/10 19:19:42]
確立した方式など無いと思うが…
なので、実績の積み上げしか無いと思われ。


911 名前:デフォルトの名無しさん mailto:sage [04/10/10 20:24:50]
>>908
行カバレッジが100%になるようなテストセットを作るとか。

912 名前:デフォルトの名無しさん [04/10/11 21:40:00]
Bisonでparseした時、エラーの出た行をしらべるにはどうするの?

913 名前:デフォルトの名無しさん mailto:sage [04/10/12 00:36:07]
flexからbisonに渡すTokenに行番号の情報を入れといて、エラー発生時に取り出して使う、
でいいんじゃない?


914 名前:912 mailto:sage [04/10/12 23:08:03]
>>913どうもです、flexのhelpみてたらoptionでありました

915 名前:デフォルトの名無しさん [04/10/13 21:00:24]
>>914
それはflexの中だけだろ?
bisonとは微妙にずれる場合も多い。

>>913 が王道かも。


916 名前:デフォルトの名無しさん mailto:sage [04/10/15 20:56:20]
DLLの関数呼び出しって、参照が一回挟まると思うんだけど、
ループで何べんも呼ぶと普通の関数呼び出しよりパフォーマンスに影響出る?
自分の処理系では参照をはさまない様に(つまりLoadLibraryと同じ方式)
してるけどいまいち差がわからない。
それよりも配置情報テーブルのサイズ減らした方が得なのかなと思ったり。

917 名前:デフォルトの名無しさん mailto:sage [04/10/15 22:32:51]
>>916
間接参照になる分だけ、パフォーマンスは落ちる。でも関数内部が
一行だけとかでない限り、あまり気にしないで良いと思うぞ。

とりあえず計ってみたら?

918 名前:デフォルトの名無しさん mailto:sage [04/10/16 11:20:18]
>>917
コンテキスト切り替えとか食らうと凄く影響するけど、
間接参照が一個増えた程度ではパフォーマンスにそれほど影響しないような…

昔、C++ で virtual ありと無しのメンバ関数で速度測ったら
virtual ありの方が速くてびっくりした事もあるし。



919 名前:デフォルトの名無しさん mailto:sage [04/10/16 11:38:42]
それはお前の計り方が間違ってただけだろう。

920 名前:デフォルトの名無しさん mailto:sage [04/10/16 11:52:11]
>>919
誤差で逆転しただけかもしれんがね。

っつか、測定前から virtualありの方が遅いと決め付けてるなら測定する意味が無いような。

921 名前:デフォルトの名無しさん mailto:sage [04/10/16 11:58:21]
>>920
その測定ソース、どんな感じに作ったのか晒してみ。

922 名前:デフォルトの名無しさん mailto:sage [04/10/16 12:14:42]
>>921
virtualありの関数を持つクラスとなしの関数を持つクラス作って
ループでn回関数を呼び出す、ループ前とループ後の時間から
かかった時間を割り出す普通のマイクロベンチだったと思うが。

関数の中身は空だったか、軽い計算させてたかは覚えてない。

あとはアセンブラの出力を見て最適化で関数呼び出しが削除されてない事と
virtualありの方は間接参照を介している事を確認した。

923 名前:デフォルトの名無しさん [04/10/16 13:49:08]
まぁ、システムをスタティックリンクにしてからだな


924 名前:デフォルトの名無しさん mailto:sage [04/10/16 14:15:49]
>>923
それは >>916-922 と関係あるのか?

925 名前:デフォルトの名無しさん mailto:sage [04/10/28 21:26:06]
日経ソフトウェアの推薦書籍コーナーで、中田さんの本が2冊あげられていた。
取り上げていた人はどちらもすごい方なので、ちと読んでみようかなという気が沸き起こった。

926 名前:925 mailto:sage [04/10/28 21:40:42]
それにしても\10000を超えるって、やっぱり高い。

コンパイラの構成と最適化
中田 育男 (著)
www.amazon.co.jp/exec/obidos/ASIN/4254121393/

927 名前:デフォルトの名無しさん mailto:sage [04/10/28 22:03:22]
>>926
ドラゴンブックより良い?

928 名前:デフォルトの名無しさん mailto:sage [04/10/28 22:10:24]
>>927
ドラゴンブックよりも内容が新しいらしい。



929 名前:デフォルトの名無しさん mailto:sage [04/10/28 22:19:39]
>>927
かなり難解ですよ。
ドラゴンブックとかプログラミング言語処理系を読んで
それでも物足りない人向け。

930 名前:927 mailto:sage [04/10/28 22:43:04]
読んでみたくなったけど、高いなあ…






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

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

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