「コンパイラ・スクリプトエンジン」相談室4at TECH
「コンパイラ・スクリプトエンジン」相談室4 - 暇つぶし2ch852:デフォルトの名無しさん
05/01/09 21:45:12
>>850
作りたい言語似よるが、C や Pascal ライクな言語を作りたければ
後者の方が楽。

853:デフォルトの名無しさん
05/01/10 02:02:26
洗練されたPerl: Perl 6文法と正規表現
URLリンク(www-6.ibm.com)

854:デフォルトの名無しさん
05/01/10 02:08:04
Win32コンソール形式の実行ファイルを作りたいのですが
参考になるページはありませんか?
A := B + C
GOTO(L)
のような3番地文の中間コード形式の出力までは出来ています。

855:デフォルトの名無しさん
05/01/10 02:39:22
>>854
>>826

856:デフォルトの名無しさん
05/01/10 09:03:09
>854
x86ならnasmのinfoやIntelのwebサイト、
exeならPE形式、
実際の実装方法はgccのソース
を見ろよ

857:デフォルトの名無しさん
05/01/10 23:52:39
スモールコンパイラ買って着た。
結構美人


858:デフォルトの名無しさん
05/01/11 19:31:43
オライリyacc本が初売り在庫処分で100円だったので買ってしまった。
かなりすすけてるよ(´・ω・`)
読んでみますか。

859:デフォルトの名無しさん
05/01/11 23:06:22
ほ、欲しかった

860:デフォルトの名無しさん
05/01/13 20:23:21
構文解析ではよく構文木を作るって言うけど、
プログラムのデータとしてはどのように持てばいいのでしょうか?

861:デフォルトの名無しさん
05/01/13 20:36:53
リスト(木のノードも含む)とか配列じゃないかね。
LISPの場合はコードがそのまんま構文木なんだよな。
LISPに慣れてるならLISPと同じ構造を目指すとよい。
でもLISPのセルは普通の言語だとGCないから扱いにくい。


862:デフォルトの名無しさん
05/01/13 20:48:38
a = (b[0] + 2) * 3;

だったら、

       root
       |
      assign
      /  \
      a    |
          mul
         /  \
        |    3
        add
       /  \
      |    1
      |
      array_ref
     /  \
     b    0

LISPのS式で表現すると
(assign a (mul (add (array_ref b 0) 1) 3))
S式は木のデバッグに都合がいい
gccの内部表現もそうだったかと

863:デフォルトの名無しさん
05/01/13 20:52:15
型やシンボルの属性情報はどうしてます?


864:デフォルトの名無しさん
05/01/13 21:06:58
記号表で別管理

865:デフォルトの名無しさん
05/01/13 21:13:32
(´・∀・`)ヘー


866:デフォルトの名無しさん
05/01/13 23:45:42
treeなんて意識しなくても大丈夫だよ。
あれはあくまでも学問。実務はパーサがやってくれる。


867:デフォルトの名無しさん
05/01/14 00:20:49
>>866
構文解析して即コードに落としちゃう場合はともかく、もう一ステージ挟む場合
(最適化するとか)は、いちど明示的にツリー作る必要があるよ。

868:860
05/01/14 00:39:11
>>861-862で
なんとなく考えが具現化してきました。
ただ今一分からないのが、字句解析で得たトークンを
構文解析でtree構造のデータとして持つとして
それを後の意味解析でどのように使うのでしょうか?

869:デフォルトの名無しさん
05/01/14 00:43:25
>>868
単純な最適化だと

        add
       /  \
       2     1

ってツリーがあったら、コンパイル時に計算して 3 に置き換えちゃうとか。

870:デフォルトの名無しさん
05/01/14 01:03:05
データフロー解析をする時は、ツリーを3つ組表現すると楽かも

871:デフォルトの名無しさん
05/01/14 08:43:21
>>869のような定数伝播ぐらいなら1パスでもできる
ただし1 + a + 2とかをa + 3にはできない
1 + aを読み終えた時点の出力を保留する様な仕組みは
もはや2パスとみなせるし、そこまでするなら木を作った方がいい


872:デフォルトの名無しさん
05/01/14 13:00:57
自分の自作言語でC言語の構造体のアラインメントを
エミュレートしたいのですが、メンバオフセットの決め方がよくわかりません。

例えば#pragma pack(4)のとき、

typedef struct {
 int a; // offset 0
 char b[1]; // offset 4
 int c; // offset 8
} X;

となるのはいいんですが、

typedef struct {
 int a; // offset 0
 char b[1]; // offset 4
 short c; // offset 6
 short d; // offset 8
 int e; // offset 12
} Y;

shortが offset=6になる理屈がわかりません。
これは暗黙的にwordのアラインメントも働いているということでしょうか?


873:デフォルトの名無しさん
05/01/14 14:02:03
>>872
かなり複雑だよ

typedef struct {
char c[1];
short s;
char cc[1];
} C;

これのsizeof(C)は6。
Cのアラインメントはshortを持つので2になる。
これをメンバに持つ構造体を作るとわかる。
typedef struct {
C c[3];
}CC;
これで sizeof(CC) すると 18。

次に
typedef struct {
 char c[1];
 short s;
 char cc[1];
 int i;
} D;
これのsizeof(C)は12。
んで、アラインメントはintを含んでるので4。
typedef struct {
D d[3];
}DD;
sizeof(DD) => 36
つまり構造体はその中のメンバの基本型のサイズが関係する
例えばcharしか持たない構造体はアラインメントが1になる

874:デフォルトの名無しさん
05/01/14 16:10:43
>>873

仰るとおり理解するのが大変でした。
アラインメント指定された値は、あくまでもその大きさの型が出現した
ときに影響するってことで、それ以下のサイズについても
アラインメント指定された値以下であれば位置調整をしなくてはならない
ということですかね。

> 例えばcharしか持たない構造体はアラインメントが1になる

この言葉でようやくわかりました。

構造体を外から見るだけじゃなくて、その中の基本型まで遡って
把握しないと作れませんね。
お答えありがとうございました。

875:デフォルトの名無しさん
05/01/14 18:45:57
難しいね。

λ......         λ......       λ......
  λ......            λ......

876:デフォルトの名無しさん
05/01/14 19:52:58
名前の分からないライブラリ関数を、動的に与えられた名前を用いて
コールすることとかって出来ますか?


877:デフォルトの名無しさん
05/01/14 19:54:21
アドレスが分かればできるよ

878:デフォルトの名無しさん
05/01/15 00:43:44
ld

879:デフォルトの名無しさん
05/01/15 09:18:20
興味があったのでアラインメントの計算を考えてみました。

構造体が
typedef struct {
 char a;  // 1byte
 int  b;  // 4byte
 char c;  // 1byte
 double d;  // 8byte
} C; とすると、

 #define N 4 // 構造体メンバ数
 int member_size[N] = { 1, 4, 1, 8, }; // 各メンバのサイズ(構造体Cの場合)
 int member_offset[N]; // メンバのオフセット(求める値)
 #define PACK 2 // #pragma pack() への指定サイズ

 member_offset[0] = 0; // 1個目のメンバのオフセットは0固定
 int pos = 0; // 次のメンバを置くことができる位置
 pos += member_size[0]; // 1個目のメンバのサイズ分すすめる

 for(int i = 1; i < N; ++i){
  int size = member_size[i];
  /* 次のメンバのオフセットをoffsetとすると、
     offset >= pos;
     offset >= min(PACK * n, size * m); // n, mは0, 1, 2... */
  int n = (pos + (PACK - 1)) / PACK;
  int m = (pos + (size - 1)) / size;
  int offset = min(PACK * n, size * m);

  member_offset[i] = offset;
  pos = offset + size; // 次のメンバを置ける位置を再計算
 }

880:デフォルトの名無しさん
05/01/15 11:23:28
言語処理って文型向きでしょうか?理系向きでしょうか?


881:デフォルトの名無しさん
05/01/15 11:27:32
玄人向き

882:デフォルトの名無しさん
05/01/15 11:28:11
よくわからんが、構造体がネストしてたらそれを再帰的にやるんだろう。

Cの型定義をパースしてサイズやオフセットを返すだけの
モジュールでも作れば需要ありそうだな。
C言語作ってるならともかく、自作言語のFFI周りの作成とかでは
誰もがやりたくない部分の1つだし。


883:デフォルトの名無しさん
05/01/15 11:30:26
>>880
理系崩れ向き

884:デフォルトの名無しさん
05/01/15 11:32:42
>>880
廃人ムキ!

885:デフォルトの名無しさん
05/01/15 13:05:54
>>882
既存のC処理系にあわせなければならないなら
offsetofやsizeofを表示するプログラムを生成して
Cコンパイラにやらせるのが楽そうだな。どうせ
どう配置されるかなんて処理系依存なんだし、
いちいち調べるのはかったるい。



886:デフォルトの名無しさん
05/01/15 14:07:25
構造体のアラインメントの話、結構興味深いね。
久々のヒット、トンクス。

887:デフォルトの名無しさん
05/01/15 14:10:17
質問ですが、言語処理系の仕事って年収どれぐらいもらえるのでしょうか?
もちろん、条件によりさまざまだと思いますが、
平均的な所を知りたく思います。

お金の話は、禁句かもしれまえんが、
生活が出来ての仕事だと思います。


888:デフォルトの名無しさん
05/01/15 14:29:32
「『言語処理系』の仕事」って業種があるのですか?

私は寡聞にして聞かない。

889:デフォルトの名無しさん
05/01/15 14:38:52
>>887
実際に、応募してみれば良いじゃん。

890:デフォルトの名無しさん
05/01/15 14:40:29
   俺の”コンパイラ屋” 想像図↓

                 ┌─┐
                 |コ.|
                 |ン |
                 │パ│
                 │ゐ│
                 │ラ .|
                 │屋 .|
                 │ !!.│
                 └─┤     ∧∧
                    │     ( `Д)
                 | ̄ ̄ ̄|─□( ヽ┐U
                  ̄◎ ̄   ◎->┘◎

891:デフォルトの名無しさん
05/01/15 15:03:15
まあ実際そんなもんだ

892:デフォルトの名無しさん
05/01/15 15:03:25
流しのコンパイラ屋や一匹狼のコンパイラ屋なんて聞かないから
メーカーのコンパイラ開発部門の社員に過ぎないだろうよ。
サラリーマンとして給料をもらうだけ。

893:デフォルトの名無しさん
05/01/15 15:05:29
Digitalmarsとかは最初は一匹狼のコンパイラ屋だったに違いない

894:デフォルトの名無しさん
05/01/15 15:29:55
>>892
そのサラリーマンの給料が知りたい、って話じゃないの? IT 系といっても
給料はピンキリだからなぁ。

個人的には、職種よりも企業の方が効いて来るに一票だが。Microsoft なら
たぶん高いよ。

895:デフォルトの名無しさん
05/01/15 15:38:18
スレ本来の技術的な話題で湧いた直後なのに・・。 可哀想な俺達。

896:デフォルトの名無しさん
05/01/15 20:00:18
>>894
おれも、そう思うに1トークン。

ただ、システム系やら(言語を利用した)開発系よりかは
悪いと思われる。

>>892
> 流しのコンパイラ屋や一匹狼のコンパイラ屋

ワロタ


897:デフォルトの名無しさん
05/01/15 20:23:06
アタマワルソ

898:デフォルトの名無しさん
05/01/15 20:30:10
HSP作者のおにたま氏はある意味コンパイラ屋?
本とかで儲けてるんだろうな。いいなぁ。

899:デフォルトの名無しさん
05/01/15 20:31:53
るby>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>。hsp

900:デフォルトの名無しさん
05/01/15 20:32:13
HSPはインタプリタ

901:デフォルトの名無しさん
05/01/15 20:32:36
Rubyモナー

902:デフォルトの名無しさん
05/01/15 20:33:16
>>898
あなたもやってみればいいのに。
俺はコンパイラじゃないけど、チャレンジしてるよ。

903:デフォルトの名無しさん
05/01/15 20:41:32
matz師とおにたまでは格が違いすぎて比較にならないだろ。
ぶっちゃけ頭の出来が違う。

904:デフォルトの名無しさん
05/01/15 20:53:22
( ゚∀゚)・∵.ブバッ

905:デフォルトの名無しさん
05/01/15 21:02:49
>>887
ボクチンの場合、一般のプログラマと変わらないです。
仕事の内容が違うだけ

906:デフォルトの名無しさん
05/01/15 22:37:33
>>902
実は俺もコンパイラ作ってます。
って言っても字句解析までしかできてませんが・・・
つーかコンパイラ作るのって楽しすぎ。

907:デフォルトの名無しさん
05/01/15 22:42:10
m4スレ立てました。
ここの住人なら興味深い言語でしょう。

m4スレ
スレリンク(tech板)


908:デフォルトの名無しさん
05/01/15 22:46:52
どうしてもブギャーに見えるw
OpenMCL が m4 使ってたな。

909:デフォルトの名無しさん
05/01/15 23:47:01
>>890
ワロタw

おれも、今の仕事やめて憧れだった
流しのコンパイラ屋でもやろうかな?


910:デフォルトの名無しさん
05/01/16 00:04:22
>>909
(・∀・)イイヨーイイヨーー

911:デフォルトの名無しさん
05/01/16 00:18:36
まずは、屋台を調達しろw


912:デフォルトの名無しさん
05/01/16 00:19:46
老後は屋台を引いて駅前で(ry


913:デフォルトの名無しさん
05/01/16 00:55:47
>906
あっしはプロトタイプベースのコンパイラ・インタプリタ作成中
ベースオブジェクトの設計にメドがたってきたから、ようやっと
字句解析にいけそう。

文法作るの楽しいよね。


914:デフォルトの名無しさん
05/01/16 01:23:21
3件の屋台が駅前で軒を連ねるのを思い浮かべてみた。
構文解析屋、字句解析屋、コード生成屋

       / / / / / / / / / / / / / /`、 ヽ
    ./ / / / / / / / / / / / / /=== 、ヽ
    / /_ / / / / / / / / / / / /     、ヽ
  |=構 ギ_l ̄||  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄||
  |=文∫  =:| ||               ||
  |= 解 コ..:| ||               ||
  |=析 =:|  || グツグツ       ∧∧ ||┌────────
  ~~~~~~~ | ||  ==┻==     (゚Д゚;) <構文解析屋の新装開店だ、ゴラァ!
        | ||   | ̄ ̄|      (|ギ ∪ || \_______________
      ┌┴┸────┴─┴┸┐
    ┌┴───────┴┐
    └─┬──────┬─┘
        | | ̄ ̄|    | ̄  ̄|  ....:.:::::|
        | |    |  ..:::::::|     |  ....::.::.:::|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


915:デフォルトの名無しさん
05/01/16 01:28:20
あー邪魔くせえ

916:デフォルトの名無しさん
05/01/16 01:50:12
LISP勉強するのに、この本は買いでしょうか?
URLリンク(www.amazon.co.jp)

917:デフォルトの名無しさん
05/01/16 01:52:56
ここはLISPや推薦図書のスレじゃありませんが。

918:デフォルトの名無しさん
05/01/16 09:49:18
ここは流しのコンパイラ屋スレです。

919:デフォルトの名無しさん
05/01/16 10:05:53
糞コテのほんたまって自分でアセンブラとリンカ書いたの?
それともnasmとかのフロントエンド書いただけ?

920:デフォルトの名無しさん
05/01/16 11:41:50
”Slim de Can”のこと言ってるなら、たぶん>>919の勘違い

921:デフォルトの名無しさん
05/01/16 13:41:51
"Slim de Can"って前はE言語という名前じゃなかったっけ?

922:デフォルトの名無しさん
05/01/16 13:50:24
Slim de CanってPEヘッダとかセクション分けは自力で吐いてるの?

923:デフォルトの名無しさん
05/01/16 14:49:08
そんなん聞いてどうすんだよ。てか本人に聞け。

924:デフォルトの名無しさん
05/01/16 17:42:27
収入の話だけど、最近は(善し悪しは別として)成果主義が結構
浸透していて、利益につながらないorつながりにくいと判断され
てしまっているところが多いみたい。


925:デフォルトの名無しさん
05/01/16 17:52:34
ふーん

926:デフォルトの名無しさん
05/01/16 18:35:13
学部生なのか専門学校生なのか知らんが、
こっちに移住してやってくれ ↓ 

スレリンク(prog板)

927:デフォルトの名無しさん
05/01/16 22:21:21
基本的な事で申し訳ないんですが、
文(Statement)と式(Expression)の違いは何ですか?
あと、2つの違いは言語に依存しますか?


928:デフォルトの名無しさん
05/01/16 23:28:12
式は結果の値を持つ。
文は制御構造しか持たず、結果の値はない。
Cは両方あるが、
Lispは式しかない。

929:927
05/01/17 19:39:40 ,
・値を持つもの→式(Expression)
・値を持たないもの→文(Statement)

ということですね。明確な回答ありがとうございます。
言語によっては必ずしも両方持たないものもあるようですが、
この定義が異なるようなケースor言語ってありますか?

それとも、この定義は一般的なものですか?

質問ばかりですいません。
いろいろ調べてはいるのですが、明確に定義or区別しているものに出会えず、
いままでなんとなく津かって来ましたので。。。


930:デフォルトの名無しさん
05/01/17 20:48:43
> いろいろ調べてはいるのですが、明確に定義or区別しているものに出会えず、
その「いろいろ」に言語仕様書は入って無いのか。

931:デフォルトの名無しさん
05/01/17 22:18:36
>>929
一般用語としてはそうだけど、
最終的には言語仕様でどう言葉を定義するかによる。
C言語で戻り値voidの関数呼び出しなんて
式なのに値がないかも(void型の値を持ってるのかもしれんが)。
あと、昔オレがCに似た構文のスクリプト言語作ったときは
Cの文に似たものを文と呼ぶことにしたが、文は全て値を持ってた。

932:デフォルトの名無しさん
05/01/17 23:34:26
それは式だよ
値を返すなら文と呼ぶ意味が無いし
Rubyも制御構造が式だけど用語の整理ができてないみたい

933:デフォルトの名無しさん
05/01/17 23:47:28
>>932
用語の統一なんて、あって無いようなものだろ?


934:デフォルトの名無しさん
05/01/17 23:50:50
ちょっと気になったんで、K&R(古~)を取り出してみた。
確かに、式に含まれる式の種類や、文に含まれる文の種類は
細かく書かれてあったが、式自体の定義と文自体の定義(そ
の違いを含む)は書かれてないな。


935:デフォルトの名無しさん
05/01/17 23:55:23
C言語の <expr> ; は式文(expression-statement)と呼ばれるから
区別はつくでしょ。

式の中にif文やfor文置けるわけじゃないし
そういう拡張したならif式とかfor式と呼ぶべき

936:デフォルトの名無しさん
05/01/17 23:58:18
>>933
Rubyリファレンスはif式だとかif文だとか統一されてない。
あれはいくらなんでもまずい。

937:デフォルトの名無しさん
05/01/17 23:59:07
>式自体の定義と文自体の定義(そ の違いを含む)

BNFで書かれたものじゃ不足か?

938:デフォルトの名無しさん
05/01/18 00:05:58
>>934
K&R日本語訳読んでるならp.277の付録A9に書いてあるぞ

>実行された文はその効果を残すが、値は持たない。

939:デフォルトの名無しさん
05/01/18 00:16:07
付録A7が式の定義、A8が宣言の定義、A9が文の定義
てちゃんと書かれてるだろ。
付録Aの参照マニュアルは一番お世話になる章だと思うんだが。

940:931
05/01/18 10:02:07
>>932
もちろんそのときは文は式の一種。
Cの構文解析やらのプログラムを転用するから、
そこで「文」を他に言葉に変換するのは手間。
実装で使う単語と仕様書で使う言葉を分けるという手もあるが、
内輪でしか使わないやつだから統一したほうがよろしい。
仕様書では明示的に「文という言葉を普通じゃない意味で使う」と断った。

941:934
05/01/18 21:31:21
>>937
お前の理論だと、どのような言語もマニュアルならいらんということになるな。

>>938
ん?ページあってるか?
しかもそのような行はないぞ?

>>939
A7は評価の順序やら、結合など細かく書かれてあるが、値を持つとは書かれていない。
A9も逐次実行されることぐらいしか、文全体の説明は書いてないぞ。


942:デフォルトの名無しさん
05/01/18 21:54:46
つ「ANSI/ISO 9899-1990: American National Standard for Programming Languages - C」


943:デフォルトの名無しさん
05/01/18 22:03:39
逆ギレ?

944:デフォルトの名無しさん
05/01/18 22:13:06
なにを式と呼ぼうが、なにを文と呼ぼうが作者の勝手。

945:デフォルトの名無しさん
05/01/18 22:21:47
>>927に対する>>928は正しいですよ。

プログラムは記号列の形で形式的に定義され、さらにそのプログラムの
意味を定義することで言語として定義されます。
(ただし完全に形式的に意味が定義されている実用言語はほとんど無い)

構文解析的に再帰的に定義された式や文は、
表示的意味論の段階で”環境(←変数と変数の値との写像)”が与えられ、
式(←数理論理学の言葉では”項”)の値は一つに定まるし
文の意味付けも”環境から環境への写像”(実質は>>928のいう制御構造)
として定められます。

>>927が構文解析的な仕様書レベルで式や文を再帰的定義の形で納得するのでなく、
意味論のレベルも含めて理解したければ、例えば「プログラム意味論」
URLリンク(www.amazon.co.jp)
の冒頭10ページ(実質P4~P8)を読むだけで理解できるよ。
(このへん読むのに予備知識は別に要らないです)

仕様書で例えば「皆が文と呼ぶものを、ここでは式と呼ぶことにします」としても
それは「犬の尻尾を足と呼ぶことにしても足は5本にならない」(リンカーン)の
話を思い起こさせます。(>>940さん、ゴメンなさい)

説明が嫌味に聞こえたら読み流してください。固執しません。>>All

946:デフォルトの名無しさん
05/01/18 22:28:08
>>944
「詭弁のガイドライン」より。

・自分に有利な将来像を予想する
・主観で決め付ける
・ありえない解決策を図る

今のあなたはこの辺が該当します。
予想しうる今後の展開は、

・レッテル貼りをする
・勝利宣言をする
・知能障害を起こす

辺りです。

947:デフォルトの名無しさん
05/01/18 23:29:23
詭弁のガイドライン2

・詭弁のガイドラインを持ち出してくる

948:927
05/01/18 23:47:25
>>945
ご丁寧にありがとうございます。
かなり難解な部分もありましたが、犬の例え話はなるほどそうですね。

ふと、感じたのですが、私のような初心者にはややこしく感じるのは、
ひょっとして言葉が直観的じゃないのが原因なんでしょうか?

うまく説明できませんが、

・(Statements)→文は、値をもたない点を含めて納得しやすいのですが、
・(Expression)→式は、値を持つ点を含めて、何か直観的でないと感じます。

式と言われると、y=ax^2+bx+c のような(数学)式を連想してしまいます。
左辺&右辺にはそれぞれ値があるのですが、式自体には値は無いですよね…
(↑数学的に)

なれですかね?


949:デフォルトの名無しさん
05/01/19 00:16:56
ソシュールとチョムスキー読むとおもしろいです


950:デフォルトの名無しさん
05/01/19 00:23:36
>>948
数学の式の"="は非常に使い方が曖昧で、"="は最低でも3通りの使い方が
なされている。
1. 定義式 y := x^2 「yをx^2と定義する」
2. 恒等式 y == x^2 「yはx^2と常に等しい」
3. 代入式 y = x^2 「yにx^2を代入する」
これらが区別できているかい?

951:デフォルトの名無しさん
05/01/19 01:07:10
>>948
>式と言われると、y=ax^2+bx+c のような(数学)式を連想してしまいます。
>左辺&右辺にはそれぞれ値があるのですが、式自体には値は無いですよね…

値の有無は式に属するか文に属するかによる。

例えばVBの代入は文に属する。
a := b := cとは書けない。
でも右辺には式が置ける。
a := b + 1など。

しかし、C言語では代入は演算子として定義されており、
演算子は式に属する。

C言語の式a = b = cはa = (b = c)と解釈され、b = cが先に評価される。
この評価の順番を結合規則と呼び、C言語の式には
かならず結合規則が存在し、代入式は右結合と規定されている。
同じ演算子同士は結合規則によって順番が決まり、
違う演算子同士ならば優先順位によって決まる。
a = b = cの場合、式の値はcの中身になる。


952:945
05/01/19 01:16:34
>>948

y=ax^2+bx+c
は同書のP2表1.1で”文”として定義されています。
正確には「y := ax^2+bx+c」と記述します。
【注意】 P2の文中で「(4) xが変数でEが式ならば,x := E は式である」
      は「文である」の誤りです。

代入”式”「 y=ax^2+bx+c」と言ったりしますが、意味的には
代入”文”「y := ax^2+bx+c」です。

代入文x:=E (←変数x,式E)については同書のP5に
「代入文は変数の値を別の値に置き換える働きをするので、
環境を別の環境に移す関数を意味する」とあります。

この説明では「関数」とあるので「式」と呼びたくなるかも知れませんが、
関数と関数との”写像”と御考え下さい。制御文ですね。

>>950にある 2. 恒等式 y == x^2 「yはx^2と常に等しい」
は論理値が与えられるので”式”です。

また、『定義式 y := x^2 「yをx^2と定義する」』はメタ記号 ::= を用いて
「y ::= x^2」と記述したりするようです。

ちなみに同書のP6の下から5行目「この関数が式に対する意味関数である」は
「文に対する」の誤りです。

頑張ってください。



953:デフォルトの名無しさん
05/01/19 01:25:46
>>951-952
ここでいうy=ax^2+bx+cは、プログラムの代入ではなく、
数学の等式だと思うぞ。放物線。

>>948
数学でもax^2+bx+cは式だと思うぞ。
ってことで、漏れ的にはそれほど違和感はない。


言葉って言うのは概念につけられた単なるラベルなわけで、
極論を言うと重要なのは概念であって言葉じゃない。
「犬の尻尾を足と呼ぶことにしても足は5本にならない」
ってのはラベルを取り替えても概念は変わらないという意味だと思う。
まあ、言葉に振り回されるのもほどほどにってことで。
とは言いつつも、プログラムにおける文と式という言葉の起源はちょっと知りたい。

954:デフォルトの名無しさん
05/01/19 01:36:39
言葉って言うのは概念につけられた単なるラベルなわけで、
極論を言うと重要なのは概念であって言葉じゃない。
なにを式と呼ぼうが、なにを文と呼ぼうが作者の勝手。
まあ、言葉に振り回されるのもほどほどにってことで。

955:デフォルトの名無しさん
05/01/19 01:40:29
文は文法に束縛
SVO
S=O(BASICの場合)
if文

式は演算子と優先順位と結合規則に束縛
a+b*cはa+(b*c)

だが、たしかにこんなことはどうでもいい
記号にも興味ない
興味があるのは動くプログラム

956:デフォルトの名無しさん
05/01/19 01:41:45
・勝利宣言をする

957:デフォルトの名無しさん
05/01/19 02:21:32
言葉って言うのは概念につけられた単なるラベルなわけで、
極論を言うと重要なのは概念であって言葉じゃない。
ってことで、皆が文と呼ぶものを、ここでは式と呼ぶことにします
漏れ的にはそれほど違和感はない。

958:デフォルトの名無しさん
05/01/19 02:30:37
・知能障害を起こす

>>953がレッテルならぬラベルを貼ってくれたから、
全部集まって神龍が現れるでFA?

959:デフォルトの名無しさん
05/01/19 08:47:37
>>956
>>958

詭弁のガイドラインを出してくるお前も

・レッテル貼りをする
・勝利宣言をする
・知能障害を起こす

に該当する。

つうか、今時詭弁のガイドラインって

960:デフォルトの名無しさん
05/01/19 11:46:26
主観で決め付けるコンパイラ屋さんガンガル、の図

     ┌─┐
     |記|
     |号 |    業界での字(あざな)は”ウルフ”
     │に│      ↓
     │興│
     │味 |         それほど違和感はない♪~
     │な .|       
     │い│          / ̄
     └─┤     ∧∧ <極論を言うと重要なのは概念であって言葉じゃない
        │     ( `Д) \_ なにを式と呼ぼうが文と呼ぼうが漏れの勝手
     | ̄ ̄ ̄|─□( ヽ┐U
      ̄◎ ̄   ◎->┘◎

961:デフォルトの名無しさん
05/01/19 12:04:02
>>946
デバッグできないプログラマに
そのまま当てはまるな

962:デフォルトの名無しさん
05/01/19 14:03:39
主観で決め付けてるわけじゃなくて、言葉の定義は、仕様によって決められているわけだから、
作者(仕様策定者)の勝手というのは正しいのでは?

963:デフォルトの名無しさん
05/01/19 14:21:33
常識とは思わないのか

964:955
05/01/19 14:41:15
ん?荒れてる?
俺の文章になにか不満あったのかな?

965:デフォルトの名無しさん
05/01/19 15:22:55
>>962
そうだけど、
無意味に普通じゃない意味で使ってると誰もついてこず
ロンリーウルフになっちゃうぜという話。

966:デフォルトの名無しさん
05/01/19 15:44:07
つまり、詭弁でもなんでもなく、正しいと。

967:955
05/01/19 16:28:31
どうやらどっちも落ち着いた?

968:デフォルトの名無しさん
05/01/19 16:50:42
デタラメな>>955の内容ときたら…
        ↑
たしかにこんなのどうでもいい

('∀`)ニヤニヤ.. . .。oO(束縛?プッ

969:955
05/01/19 16:57:53
そう、ごめんね

970:デフォルトの名無しさん
05/01/19 17:03:48
>>962が発明した世界で初めての概念に関しては、その字面も、その定義も
>>962の脳内仕様書によって決められるわけだが、「式」とか「文」とかはなぁ…。

まぁ、そういう「コンパイラ屋」さんは駅前で
詭弁でも売って(売値はついても買値はつかないだろうけど)、
一人でやっていくしかないだろうねぇ。。


971:デフォルトの名無しさん
05/01/19 17:04:50
相変わらずの糞スレだな

972:デフォルトの名無しさん
05/01/19 17:06:11
みんな!うんこトークしようぜ!!!!

973:デフォルトの名無しさん
05/01/19 17:06:43
>>972
HSPスレへお帰りください。

974:デフォルトの名無しさん
05/01/19 17:07:34
うんこー!

975:デフォルトの名無しさん
05/01/19 17:09:40
>>971がむやみに頑張るスレだからな

976:デフォルトの名無しさん
05/01/19 17:11:25
ひょっとして知能障害を起こすってやつですか >>972

977:デフォルトの名無しさん
05/01/19 17:13:03
>>976のうんこー うんこー!!

978:デフォルトの名無しさん
05/01/19 17:13:37
盛り上がってまいりましたw

979:デフォルトの名無しさん
05/01/19 17:16:50
ここは馬鹿と池沼しかいないスレでつ。

980:デフォルトの名無しさん
05/01/19 17:17:17
>>970
「式」とか「文」だって仕様策定者なら勝手に決められる。

981:デフォルトの名無しさん
05/01/19 17:21:09
仕様で「式」の意味が決められているということは、その言語では「式」がそういう意味であるということだろう。
これが違うという方こそ詭弁だろ。


982:デフォルトの名無しさん
05/01/19 17:21:17
詭弁ばかりのリア厨が粘着荒らしか。
死ねよ。

983:デフォルトの名無しさん
05/01/19 17:22:07
解析フェーズで尻尾も足と決めてみた。

984:デフォルトの名無しさん
05/01/19 17:22:58
詭弁ばかりのリア厨って>>946のことか?

985:デフォルトの名無しさん
05/01/19 17:23:13
オチケツ馬鹿ども。

986:デフォルトの名無しさん
05/01/19 17:23:33
このまえ>>982のうんこ食べたんです。
消化しきれなかったとうもろこしの粒があって、なんだかちょっぴり幸せでした…^^

987:デフォルトの名無しさん
05/01/19 17:25:50
議論の内容が低レベル過ぎ…

988:デフォルトの名無しさん
05/01/19 17:27:37
>>981がやねうらおなら笑える。
URLリンク(d.hatena.ne.jp)

989:デフォルトの名無しさん
05/01/19 17:29:49
>>946の予想通りになった

990:デフォルトの名無しさん
05/01/19 17:30:42
どうせ荒らしてんのは馬鹿なC厨だろ。
なんせ式と文だけでこれだけ盛り上がれるんだからな。

991:デフォルトの名無しさん
05/01/19 17:30:47
仕様で、文や式の定義が決まってるのはCだって一緒だろ。
それに文句言う奴は、言語の仕様でいろんな用語の意味が定められているのは
無効といってるのと一緒。
そういう仕様を持った言語なんて腐るほどあると思うが。

992:デフォルトの名無しさん
05/01/19 17:32:04
989=946

993:デフォルトの名無しさん
05/01/19 17:33:09
内容がデタラメでない、という前提でな。

994:デフォルトの名無しさん
05/01/19 17:33:36
C厨は人類の敵。

995:デフォルトの名無しさん
05/01/19 17:34:12
>>993
もちろんな。
ただし、値を返すものを「文」と定義しただけでは、デタラメには該当しない。

996:デフォルトの名無しさん
05/01/19 17:35:12
C厨はうんこ!

997:デフォルトの名無しさん
05/01/19 17:36:56
何がここまで>>940を固執させるのか?
以後は、心と身体・メンタルヘルス板でドゾ

998:デフォルトの名無しさん
05/01/19 17:37:26
Rubyの文は値を持つ。
それは仕様で定められてるのだから仕方がない。
作者の勝手なんだよ。
デタラメをやらない限りな。

999:デフォルトの名無しさん
05/01/19 17:37:26
1000ならC厨は死滅!

1000:デフォルトの名無しさん
05/01/19 17:38:20


1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch