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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 13:12:25 ]
禁止事項【臨時】
・前スレの911自身の書き込み、またそれに関連した書き込みを禁止致します。
 (スレが荒れる原因となります)

プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換,
CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン,
SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化,
JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。
意味論に関する話題も歓迎です。

過去スレ
1 pc.2ch.net/tech/kako/981/981672957.html
2 pc2.2ch.net/test/read.cgi/tech/1021136715/
3 pc5.2ch.net/test/read.cgi/tech/1070089173/
4 pc5.2ch.net/test/read.cgi/tech/1100097050/
5 pc8.2ch.net/test/read.cgi/tech/1106129164/
6 pc8.2ch.net/test/read.cgi/tech/1115335709/
7 pc8.2ch.net/test/read.cgi/tech/1129287390/
8 pc8.2ch.net/test/read.cgi/tech/1131273918/
9 pc8.2ch.net/test/read.cgi/tech/1135082582/
10 pc8.2ch.net/test/read.cgi/tech/1146844753/
11 pc11.2ch.net/test/read.cgi/tech/1160879890/
12 pc11.2ch.net/test/read.cgi/tech/1188688416/
前スレ 13 pc12.2ch.net/test/read.cgi/tech/1233143342/
関連リンクは多分 >>2-10 あたり

175 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 10:55:54 ]
UTF-8専用の正規表現コンパイラなら作ったことあるが。
状態遷移マシンにコンパイルするので当然速い。
その他は省略。

176 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 11:13:15 ]
よくわからないんだけど、Aが一番偉いって言う設定なの?

大量のファイルを高速でコンパイルできることが必要なときもあるけど、
必要でないときもあるし。まして仕事なら、必要ないのに過剰に実装して
俺スゴイとか言ってるのはただのアホだろ。

しかも、なんでその点が実装の経験を判断する基準になってるの?


ツールを使ったか使ってないかがなぜ問題になるのかも謎。
体育会系の発想かな?

LLなら手書きしても大して変わらないし、LALR(1)とかを手書きしたから偉い
って思うやつがいたりするのか・・・?

楽していいもの作るのが優秀なプログラマだと思うけどね。根本的な
発想の違いがある気がする。


すまんマジレスしてしまった

177 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 11:15:37 ]
前スレで馬鹿にされた人が書いたから。

178 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 12:31:39 ]
大量のファイルを高速でコンパイル出来る物と言う言葉が頭に残っていたから。
後手書きは体育会系かな?

179 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 12:35:34 ]
しかしこんだけ組んでる人が居るとなったら、
本来の相談室に戻した方が良いと思うけどネタがないね。

180 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 12:38:21 ]
しかしこんだけ組んでる人が居るとなったら、
本来の相談室に戻した方が良いと思うけどネタがないね。

181 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 12:43:51 ]
しかしこんだけ組んでる人が居るとなったら、
本来の相談室に戻した方が良いと思うけどネタがないね。

182 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 17:46:18 ]
俺は3つ作ったやつだが。ここのスレはほとんどROMだ。
最近はやりの機能や、言語的に高度な機能は、自作実用言語には
要らないんだよ。 使いたければ既存の言語を使うので十分。
結局、オリジナルな言語が欲しいのは既存の言語でめんどくさい部分を簡略化して
組込みたいor使いたい、だから記述が簡単であり、専門的な目的に強力に特化した
言語を作ってる。だからここの話題とはなじまない。

183 名前:デフォルトの名無しさん [2009/12/26(土) 18:27:58 ]
>>182
いわゆるDSLでんな



184 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 19:02:20 ]
非正格な言語のコンパイラを作るとしたら、
flex/bisonでは間に合わないでしょうか?

185 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 19:08:33 ]
flex/bisonは文法を解析するだけのツールだから正格も非正格も関係ないのでは

186 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 21:12:50 ]
>後手書きは体育会系かな?
作った言語自身でセルフコンパイルさせる必要があったので全部手書きしたことある
いまから考えたら第1段階だけyacc使えばよかったとは思うけど


187 名前:デフォルトの名無しさん [2009/12/26(土) 21:58:53 ]
flex/bison 使ってるからスクラッチとはいえないかも知れないが、
宇宙系のやつを作ったことがある。

188 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 22:30:53 ]
前にも聞いたけど、ネタがないなら再投下させてもらうけど、
タイガー本の和訳ってどう?読んだ人いる?

帯の宣伝文句で、「実装と理論の卓越したバランス」みたいなことが
書いてあったけど、実際どう?

まぁ和訳を読むくらいなら原書読めばいいじゃんと思わなくはないけど

原書の情報でもいいからおせーてください

189 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 22:47:46 ]
虎本ってML知らなくても読める?

190 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 02:13:05 ]
しかしお笑いだなw
GPCPUだかなんだか知らんけど前のスレの奴の言ったとおりの物が出てきたよ。
次はループをタスク間で動的に実行か。VMかOSの力が必用なことも言ってたとおりだなw
俺達は馬鹿と紙一重の奴を相手にしてたのか(自嘲

191 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 02:28:53 ]
GPGPUのことか?

192 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 08:05:47 ]
本人が必死だな

193 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 04:11:01 ]
いや、グリッド化では当たり前の未来の技術になってきてる。
言っていることと本人の性格は必ずしてイコールでは無いと言うこと。
結論を述べれば、方向性は合っていて研究中。



194 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 15:47:54 ]
そんなコンパイラや実行環境はこのスレの趣旨からはみ出てないか?

195 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 16:37:24 ]
ぶっちゃけ前スレの流れを断ち切りたい。

196 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 18:15:40 ]
年寄りだからそのうちくたばるだろ

197 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:51:30 ]
年寄り?

198 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:03:56 ]
若造が精一杯背伸びしてるみたいだが。

199 名前:デフォルトの名無しさん [2009/12/28(月) 21:06:45 ]
糞じじいは縁側で Lisp でもさわってろ

200 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 01:51:29 ]
GCのないLISPを考えてみる
原因はクロージャとconsなわけであるが

201 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 02:51:34 ]
今時、GCのない言語なあ
Cのシェアを奪えるのかい


202 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 14:26:29 ]
クロージャはともかくconsをfree()するのは嫌。

203 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 20:59:12 ]
クロージャは何トカ解析すれば消えるらしいけど
consはしょうがないね。定数的に使うか、
破壊禁止にして循環構造を防げば参照カウンタで済む。
カウンタ自体のオーバーヘッド考えるとやりたくないけど。
ただ参照カウンタ式はオーバーフローの対策が要る。
1セル高々16bitにして65535になった時点で例外を投げるか。




204 名前:デフォルトの名無しさん [2009/12/31(木) 00:47:20 ]
この年になっても、正直クロージャがあってよかったと思える場面に出会えてない。
みんなこんなもん?

205 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 01:09:26 ]
お前の使っている言語に
簡単に使えるクロージャはあるの?


206 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 02:20:18 ]
zip.2chan.net:81/5/src/1261905031562.jpg

207 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 02:47:02 ]
>>200
new lispってのがそんな事やってた様な気がするが

208 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 03:03:35 ]
何の対策もない処理系でも、あらかじめ必要分を確保するとかで、
範囲内のGC起動を抑止するってことは可能だから
機能縮小してまでGCレスにする事もない気がする。

209 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 13:52:29 ]
寿命解析すれば自動的に抑止することもできるよ。
実用的には適当なところで打ちきらないとダメ。
stalinみたいに最適化に数時間かかると用途が限られる。

210 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 21:27:38 ]
Domain-Specific Languagesの総本山ってどこだっけ?


211 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 10:23:53 ]
pragmatic programmers のことをさがしてるのかな?
元々Unixの設定ファイルとか、Lispの方からの伝統的なものだが。

212 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 06:59:23 ]
GCが有る言語は嫌いだ。リアルタイム処理が確実に出来ない可能性がある。
クリティカルパスを切れば良いんだけどね。

並列コンピュータのコンパイラは今後進歩するのかね。疑問。
>>193や某氏の言う通りになるほど甘くはないと思うんだが。

213 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 08:12:44 ]
1980年代から研究も実装もあるんだからまずはサーベイだろ。



214 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 23:43:37 ]
>>211
DSLの英語のページどこだっけ?

215 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 23:53:47 ]
DSLs in Boo: Domain-Specific Languages in .NET
これどうなのか書評教えてくれ

216 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 18:40:08 ]
DSLってC++界隈では低く見られてない?
DSLはどうせC++か何かのコードを生成するんだろ
とか、汎用の言語の方が偉いとか。

217 名前:デフォルトの名無しさん [2010/01/15(金) 12:07:43 ]
つーか、言語自体が全般的に(ry

218 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 12:09:19 ]

・明快入門コンパイラ・インタプリタ開発 C処理系を作りながら学ぶ(林晴比古実用マスターシリーズ)
www.amazon.co.jp/dp/4797357037

219 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 12:13:53 ]
林晴比古(笑)

220 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 12:21:08 ]
読んだことないから本当に風評通りに酷いのか分からん。
昔は酷かったが成長してるのかもしれんし。

221 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 17:15:16 ]
老化してるよ

222 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 11:31:56 ]
数字読み込み関数は数字じゃない文字が来るまで文字をくっつけて返す
識別子読み込み関数は[A-Z][A-Z0-9_]*を文字をくっつけて返す
"(", ")"はそのまま返す

みたいにS式っぽいものトークン分解しています

"(123ABC)"を "(", 数字, 識別子, ")" てトークン分解
しちゃうんですけど数字と識別子が別れていないので
これはエラーにしたいです (123 ABC)と区別付きません
普通はどうやってこういうのをトークン分解するんでしょうか



223 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:02:51 ]
>222
普通どうするかは知らないが「数字じゃない文字が来るまで」のところで判定すりゃいいだけなんじゃないの?



224 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:16:30 ]
数字を読んでるときにアルファベットが出てきたらエラーにする。

225 名前:222 mailto:sage [2010/01/17(日) 12:32:55 ]
なる・・・ほど・・・
ありがとです

226 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:35:56 ]
>>225
まず本を一冊通読すべき。

227 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:50:05 ]
スレチな気もしますが、ざっと見た感じこのスレが一番近い気がするのでここで質問します。

自作のインタプリタ言語用の文法を考えています。
Ruby,Python,JavaScriptあたりを参考にしてクラス系オブジェクト指向言語に
しようと考えていますが、いくつか悩んでいます。ご意見いただければ助かります。

まず、class宣言の文法です。上に挙げた言語の中では、Rubyの物を借りようと考えています。
class MyClass
 def my_method(arg)
 end
end
という風にしようと思っていますが、
例えば、メソッドが複数ある場合、endが関数宣言の最後なのかクラス宣言の最後なのか、
見分けがつかない事があるように思えます。
これはPythonではもう少しマシですが、クラス宣言が並んでいる場合に、
どのクラスのメソッド宣言なのかわかりにくい所があると思います。
JavaScriptでは、
MyClass.prototype.my_method = function(arg){
}
のように宣言されるので、この問題はないのですが、初学者が理解しにくい点、
メソッドの宣言を一箇所にまとめる事を強制できない点から自分の趣味には合わないと感じます。

そもそも巨大なクラスを宣言すべきでない、という意見もありますが、 -> d.hatena.ne.jp/akkt/20080424/1209051266
実際問題、読みにくいコードが多いように思えます。
他の便利な記法をご存知の方はいらっしゃいますか?
また、上記の記法のうちで、どれが好きですか?
ご意見ください。

228 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:00:40 ]
class MyClass
 def my_method(arg)
 end def
end class

229 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:08:55 ]
>>227
古いfortran風にブロックの対応を明示するという記法もあるよ。
#面倒なうえに逆に見難くなるなので嫌い。
class MyClass
 def my_method(arg)
 end def my_method
end class Myclass

見分けやすさというレベルならもっと単純に
ブロックの対応を表すコメントを追加する方がよいと思う。
有名なエディタを公式環境と決めて、それ用の自動追加マクロを作ればOK。
class MyClass
 def my_method(arg)
 end //def my_method
end //class Myclass


230 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:11:48 ]
Python(Haskell)みたく、オフサイドルールにしちゃえば?
ttp://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%95%E3%82%B5%E3%82%A4%E3%83%89%E3%83%AB%E3%83%BC%E3%83%AB

231 名前:227 mailto:sage [2010/01/17(日) 21:19:28 ]
レスありがとうございます。

>>228
見ていてVBのend subを思いだしました。
end def、end classというのは予約語を増やさないという意味で良いですね。
予約語を増やしてもいいのなら、シェルスクリプト風に
class MyClass
 def my_method(arg)
 fed
ssalc
というのも簡潔でしょうか。

>>229
コメントで良いという意見ももっともです。

>>230
インデントだけだと、
class Hoge
 class Fuga
  def foo
  // Is here end of function or class?
 def bar
のようにネストした時に、どれがどれかわからなくないですか?


232 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 22:27:53 ]
beginとendの対応が見えるような短いブロックなら,インデントだけでも見難くはないと思うんだよね
長くなるとendはあってもなくても変わらないし

233 名前:227 mailto:sage [2010/01/17(日) 22:35:10 ]
>>232
まったくその通りだと思います。
「インデントよりもendの方が良いけど、もっと良いのないですか?」
という質問ではなく、
「インデントも、endも、わかりにくいのですが、もっと良いのないですか?」
という質問のつもりでした。
わかりにくかったのでしたらすみません。

インデントの場合
メソッド宣言は1インデント
メソッドの中身は2インデント
と決めうちで書ければ良いかとも思いましたが、
それはそれでありえないと思いました。





234 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 22:10:44 ]
もう JavaScript みたいにするしかないじゃん

235 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 01:14:24 ]
そういえば、0123abcをエラーにしてませんでした。気をつけよっと。

xml風
<class>A
 <def>add a b
  a+b
 </def>
</class>
/def /classはキーワード
class A
 class B
  def a,b
   a+b
  /def
 /class
 def a b
  a + b
 /def
/class

endじゃなくてe
class A
 class B
  def add a,b
   a+b
  edef
eclass
def add a,b
a+b
edef
eclass
とか。

236 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 03:26:02 ]
SGMLつかえよ

237 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 07:51:05 ]
>>235
XMLベースなら改行に意味を与えない方がよいよ、とマジレス。

238 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 09:17:19 ]
YAMLっぽいのはどう?

A:
- {add(a,b): a+b}
- {sub(c,d): c-d}

B:
...

239 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 11:03:57 ]
LISPでいいだろ
アホか

240 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 18:49:07 ]
>>239
ヒント:クラス系オブジェクト指向言語

241 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 19:38:34 ]
>>240
CLOS


242 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 19:54:49 ]
endだけで構文解析すりゃいいだろ?
インデントでなんて馬鹿げてる。

243 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 23:35:14 ]
nadesi.com/man/page/%E3%82%B3%E3%83%B3%E3%83%9C

forth 系のアプローチ…だと…



244 名前:227 mailto:sage [2010/01/20(水) 00:14:50 ]
>>234
意味さえ分れば、プログラムは作りやすいですよね。

>>235
XMLありえなす。

edef はどうかと思いましたが、endefはアリかもw

>>238
XMLのと合わせて思ったんですが、
Squeak(smalltalk)の開発環境みたいなUIで表示するのは有ですかね?
まあ、自分のテキストエディタが使えないといけない、
と思う人は特定数いそうですけど。

>>241
不勉強なんですが、
CLOSはプロトタイプベースに近いのではないかと思ったんですが、
どうでしょう?
マルチメソッドだけでがんがれ、という意味であれば、
それはそれでネストしないはずなので、答としてアリな気はしますね。

>>243
構文解析という意味だと、>>235 さんのedefアプローチに近いですね。
わかりやすい予約語を作れればいけそうですね。

245 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 00:29:45 ]
>>244
CLOSはクラスベースだよ。defclassで定義する
カプセル化はしないだけ

246 名前:227 mailto:sage [2010/01/20(水) 00:29:52 ]
連投すみません。

メソッド呼び出しの構文について質問です。
Rubyでは、
my_object.my_method arg1, arg2
のようにメソッド呼び出しの括弧を省略する事ができます。
これはとても便利だと思うので、自作の言語にもこの文法を取り込みたいです。

一方で、JavaScriptのように関数をファーストクラスオブジェクトとして
扱いたいという要求もあります。
window.set_on_exit(object.my_event_handler)
などとして、イベントハンドラを追加できるような文法を考えています。

Rubyでは、
a = my_object.my_method
とした時に、my_methodが呼び出され、実行結果が変数aに代入されます。
しかし、自作の言語の現在の仕様では、メソッド自体が変数aに代入されます。
この差をどう埋めるべきかで悩んでいます。

案としては、
- 特定のメソッドの時には引数は評価されないようにする。
- a = &(object.method) か a = object.&method のように&を必要とする。
などがありますがどれも綺麗ではないです。

個人的に一番良いかなと思っている仕様は、
a = object.method   <= methodが返る
a = object.method arg <= methodが実行される
a = object.method()  <= methodが実行される
という、引数があれば関数呼び出しで、引数が無い場合は括弧の省略は不可という仕様です。

これは分かりにくいでしょうか?
ご意見頂ければ幸いです。

247 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 00:43:05 ]
場当たりな文法は破綻しやすいからなあ。
引数を二つ取る関数に引数を一つ渡したらどうなるの?

Curryingとかを調べてみると良いかも。

248 名前:227 mailto:sage [2010/01/21(木) 01:24:49 ]
>>247
場当たりに見えるという事はまだ作り込みが甘いんですね。

>引数を二つ取る関数に引数を一つ渡したらどうなるの?
Rubyでは、呼び出し時にエラーになりますし、
JavaScriptでは、Undefindを渡したのと同じ動作をすると思います。
このどちらかが分りやすいかなと考えています。

>Curryingとかを調べてみると良いかも。
説明が足りなかったですね。
2引数の関数を呼び出す場合には、
hoge(a, b) か
hoge a, b
と書くようになる事を考えています。

カリー化については、構文によるサポートはいらないのではないかと
思っています。
単にカリー化を使いこなせてないだけかもしれませんが、
あまり常用する物とは思えませんし、Haskellのような構文で部分適用を
サポートすると、静的に型を解析しない言語では、
意図せずカリー化を行ってしまい、混乱するのではないかと思います。

逆にカリー化を行いたい場合には、
Rubyのようにメソッドが基本的にオブジェクトではない言語では、
currying_function = currying(method(:hoge), arg1)
curring_function(arg2)
のようにメソッドをオブジェクト化する必要がありますが、
メソッドや関数が初期からオブジェクトであれば、
currying_function = currying(hoge, arg1)
curring_function(arg2)
のように黒魔術(リフレクション)を使わずに簡潔に書けると思います。

249 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 04:10:49 ]
merd.sourceforge.net/pixel/language-study/syntax-across-languages/bjcrntRfl.html
homepage.mac.com/mkino2/oop/messaging.html

メソッドがだとすると、その obj の生成、複製、破棄とか
気になるといえば気になるのにゃあ・・・

250 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 15:27:35 ]
引数をあらわす括弧と、演算子の優先度をあらわす括弧が
ネストした時に、どれがどれかわからなくないですか?

251 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 15:33:19 ]
わからなくない

252 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 23:36:25 ]
>>250
形式言語とパーザの勉強して、
「曖昧な文法」ってどんなのがあるか理解しよう。

253 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:13:45 ]
perlfunc

List operators take more than one argument,
while unary operators can never take more than one argument.
Thus, a comma terminates the argument of a unary operator,
but merely separates the arguments of a list operator.



254 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:18:23 ]
明快入門コンパイラ・インタプリタ開発 C処理系を作りながら学ぶ

神本だった。ここでうだうだ糞文法の質問している奴
読めや

255 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:19:20 ]
本を紹介するんならICBMくらい書けや

256 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:21:06 ]
>>255
あー?お前誰に命令してるんじゃ?


257 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:22:43 ]
>>255
あー? テポドン2号落とすぞコラ

258 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:24:52 ]
テポドン2号だと?
おまえ、それかっぱえびせんじゃねえか

259 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 02:22:16 ]
ワロヒコ乙

260 名前:227 mailto:sage [2010/01/22(金) 03:00:20 ]
>>249
C#などのように扱い始める時にオブジェクトの生成を行う方法と、
JavaScriptのようにメソッドの定義時に行う方法があると思っていますが、
後者の方が心理モデルを構築しやすく、理解しやすいと思っています。
オブジェクトにはフィールドとメソッドがペタペタくっついてる、と
説明すると、初学者にも理解してもらいやすいのではないでしょうか?

>>250-253
たしかに分かり難い所があるかもしれません。
この点に関しては、>>253 であげられた所ドユメントでも、
> the simple (but occasionally surprising) rule is this:
と書かれています。
Perlは各関数が取る引数の数によってどうパースされるかが変わります。
Rubyでは、"p (1) - 2"というコードで 1.6 と 1.8 で結果が違います。
また、Ruby 1.8 では、引数の数でも変わります。

これらをふまえると、単純に関数名の後ろのスペースの有無で評価結果を
変えるのが良いのではないかと思っています。

私は過去にCなどの言語で関数名の後ろにスペースを入れるべきという主張を
見た事がありませんし、while, for 等の構文と関数呼び出しを
スペースの有無で見わけるという、コーディング規約も一般的だと思います。
そのため、自由度は減りますが、見た目的には良いのではないでしょうか?

>>254
どのような点が良いのでしょうか?
Cのような低いレイヤの処理系を実装するとなるとinline化の判断や
可変長配列サポートの仕方とかが気になりますが、
その辺はまっとうな方法を紹介してますか?
土日に本屋に行って探してみます。
>>255
じゃあ、ABMで。

261 名前:デフォルトの名無しさん [2010/01/22(金) 05:11:45 ]
>Rubyでは、"p (1) - 2"というコードで 1.6 と 1.8 で結果が違います。
>また、Ruby 1.8 では、引数の数でも変わります。

Ruby作ってる奴ってアホだろ

262 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 07:37:29 ]
> while, for 等の構文と関数呼び出しを
> スペースの有無で見わけるという、コーディング規約も一般的だと思います。

ナンセンス。
エディタと文法と実行モデルを区別しようぜ。

263 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 08:52:13 ]
>>261
a +b と a + b で意味が違うとかな。
アホ扱いされる一面ではある。

>>260
そういう、レキシカルアナライザの挙動が、パーサに左右される状態に依って変わる、
なんていう言語はパーサとレキシカルアナライザを作るのが大仕事になる。

なに考えてるのかわからんが素直に正規表現でトークンを切り出して、LL(1)かLALR(1)で
処理できる文法にしたほうがよい。まずは。



264 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 10:13:13 ]
>>260
> Cのような低いレイヤの処理系を実装するとなるとinline化の判断や
> 可変長配列サポートの仕方とかが気になりますが、
> その辺はまっとうな方法を紹介してますか?

お前、自分のレベルにあった本をまず読めよ。
なんで上から目線なんだw

265 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 11:26:13 ]
ワロヒコの本を紹介するような椰子には、上から目線で当然だろwwwww

266 名前:227 mailto:sage [2010/01/23(土) 00:12:26 ]
>>261, >>263
知らなかった。確かに違う。> a +b と a + b で意味が違う
この辺、複雑なルールなのに穴に落ちる事が少なく
普通の使用者は気がつかないようになってるのが、凄いですね。
本当にRubyの作者はアホですね。
このRubyのやつとか、Perlの関数名によってパース結果が変わるのとか、
真似するのはやめるべきですね。シンプルよりも使いやすさを求めるのではなく、
許容できない使いにくさが無い範囲でシンプルな文法を目指したいですね。

>>246 で書いた文法の場合、正確に文法を書くとすると、
関数呼び出し ← id ( '('? (式 ',')+ ')'? / '()' )
参照 ← id
にしようと考えています。( ?は省略可能, /はor, +は一回以上の繰り返し)
要は、idの後ろからその式の終端までに他の式があれば
関数呼び出しとして扱うつもりです。

LL(1)だと、 a(1) と a = 1 が両方パースできません。
PEG文法の範囲の文法が使いやすくて良いと思います。パーサの実装も楽です。
LLだと無限大相当ですが。

267 名前:227 mailto:sage [2010/01/23(土) 00:13:47 ]
>>262
区別できてる気はしませんが、話したいのは文法についてです。

while (true);
myfunc(true);
のように書き分けるコーディング規約は一般的だと思いますが、違いますか?
検索して3番目に出てきたPearライブラリの規約では、
pear.php.net/manual/ja/standards.control.php
> 制御構造では、関数コールと区別するために、 制御キーワードと開きカッコの間に空白を 1 つ置きます。
と書かれていました。皆これを当然と思っているのなら、
関数名の後ろにスペースを入れた場合、エラーになるまたは違う解釈をする、
というのは落とし穴にならないのではないでしょうか?

>>264
設計、実装にあたり参考になる本を紹介してもらう事もあるかもしれませんが、
それは、それでよろしくおねがいします。
ちなみにどんなレベルが私に合ってると思いますか?

>>265
私が言うのも何ですが、何でこのスレではそこまで煽られてるんですか?

268 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 01:51:17 ]
>>266の文法はPEGとしても>>246の例と一致していないよ。たとえば
「func a, b,」や「func (a,」が関数呼び出しにマッチしている。
書きたかったのは下のような奴じゃないかと思うんだけど。

関数呼び出し := id ( '()'
/ 式 ( ',' 式 )*
/ '(' 式 ( ',' 式 )* ')' )

で、この文法ってRubyと大差ない複雑さだよ。
「f f, f a, b, c」とか、式の中に裸の「,」が出てきたら困るよね。

269 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 02:34:05 ]
横レス失礼

>>266,267
言っている事が矛盾している気がするヨ。

>>266では、a +b と a + b で意味が違う事を問題としているが、
これはRubyが構文によってセパレータ(字句区切り子)の解釈が異なる事に起因する。
しかし「二項演算子の前後には空白を入れる」という一般的なコーディング規則に
従っていれば実用上の問題は生じない。

対して、>>267ではwhile文と関数呼び出しという二つの構文で、セパレータの
解釈が異なることを問題としていない。それを一般的なコーディング規則であるから、
問題は生じない(落とし穴にならない)と主張している。

Rubyの構文が汚いのは分かるから、>>263が助言しているように、
まずはセパレータでトークンを区切って素直にパーズできる文法で設計することを勧める。

270 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 02:48:19 ]
>>268
ここはこれでも全然煽られてないんだよ。
能力を持った人しか来れないし。
逆にエロゲの人でも能力を持っていればそれほど煽られない(煽られないことはないが)。
君みたいにダメプログラマで上から目線なら、今までだったらもっと煽られて相手にされてないよ。

トークンの切り出し程度で悩んでるなんて、ここに来る資格はない(断言

271 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 03:16:08 ]
偉そうなこと言っといて安価ミスってると恥ずかしいよね

272 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 03:47:25 ]
ああ(笑

273 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 09:48:12 ]
>>267
>while (true);
>myfunc(true);
>のように書き分けるコーディング規約は一般的だと思いますが、違いますか?
少なくとも、コーディング規約としては一般的ではない。




274 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 10:15:29 ]
ワロヒコって言った奴ちょっと出てこい

275 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 10:33:34 ]
>>273
CのK&RやJavaは、そうやって書き分けるだろ。それが一般的。
GNUが特殊だと思う。






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

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

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