- 1 名前:デフォルトの名無しさん mailto:sage [2005/05/06(金) 08:28:29 ]
- プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,タスク並列化,SSA変換, CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン等各種最適化, それにVM,GC,JIT,リンク時最適化,動的バイナリ変換などなど。 意味論に関する話題も歓迎です。 前スレ 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/ (前スレ) 関連リンクは多分 >>2-10 あたり
- 577 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 18:55:32 ]
- オブジェクト指向と型は何の関係もない
- 578 名前:デフォルトの名無しさん [2005/06/22(水) 19:10:02 ]
- オブジェクト指向のクラスを型とみなす事「も」できる。
通常のOOプログラミングでは、型とクラスの相違は曖昧にされる事が多い。 理論では識別したがるみたいだけどw
- 579 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 19:12:12 ]
- なんで区別したがるんだっけ?
何度か読んだ覚えがあるけどど忘れした
- 580 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 20:13:18 ]
- 俺も教えて欲しい
- 581 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 20:31:22 ]
- Haskellなんか、クラスと型は別もんだけど
そういう意味じゃないの?
- 582 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 20:32:48 ]
- クラスがあるのに静的型が無い言語とか、そもそもクラスが無い言語とかもあることから来たのでは?
- 583 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 21:06:03 ]
- 言語処理系に関する研究の進展によって、
それまで言語処理系の内部機構だったものが、 言語ユーザに安全かつ判りやすい形で開放される事がある。 ・・・メモリー・アロケーション然り、ユーザ定義型しかり。型変数、型推論も。 Lispとか、OOとか、そーゆー「開放」を前倒しした形で試すには、 良いプラットフォームなのでわ?と
- 584 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 21:11:57 ]
- >>583
日本語でお願いします
- 585 名前:583じゃないが mailto:sage [2005/06/22(水) 21:15:44 ]
- 言語として本格的に実装する前の実験段階の実装には、LISP や OO を使うと良いのではないか?
って読んだ
- 586 名前:デフォルトの名無しさん [2005/06/22(水) 21:21:16 ]
- お前の日本語力、理解力が低いのは、よく判った。
これまでの言語処理系発展の歴史の中で、 それまで言語処理系内部の仕組みとしてユーザの立ち入りを禁止していた機構 例えば:メモリーの動的アロケーション、型の追加定義、型を推測する仕組み が、簡潔かつ安全な形でユーザに開放されてきた。 ・Lispのように高階関数で言語の実行機構を弄る事ができる言語、 ・オブジェクト指向言語のように、データと操作をカプセル化して新しい型を定義しやすい言語、 は、上記のような「新しい機構のユーザへの開放」を実験するのに適しているのではないか? 以上
- 587 名前:583=586 [2005/06/22(水) 21:22:41 ]
- >>585
介錯かたじけないっす。 >>586は>>584宛ての熱いラブレターでつ・・・
- 588 名前:583じゃないが mailto:sage [2005/06/22(水) 21:25:17 ]
- 読みにくいです
- 589 名前:デフォルトの名無しさん mailto:sage [2005/06/22(水) 21:28:39 ]
- はい。反省。
さっき翻訳の真似事で下訳してたから、 むちゃくちゃな語順の日本語をしゃべってるかもしれない・・・
- 590 名前:デフォルトの名無しさん [2005/06/23(木) 00:07:11 ]
- >>586
アフォ
- 591 名前:デフォルトの名無しさん mailto:sage [2005/06/23(木) 00:11:25 ]
- 哀れな奴
- 592 名前:デフォルトの名無しさん mailto:sage [2005/06/23(木) 02:12:10 ]
- 字句解析はできる
コンパイルも通って実行もできる でも実行した結果は意味不明 そんな感じの文章
- 593 名前:デフォルトの名無しさん mailto:sage [2005/06/23(木) 04:16:57 ]
- 重箱の隅つつくだけ
- 594 名前:デフォルトの名無しさん mailto:sage [2005/06/24(金) 04:24:43 ]
- >>553
O'Reilly の Lex & Yacc には少なくても無い。 用語の説明コーナーに出ているだけ
- 595 名前:デフォルトの名無しさん mailto:sage [2005/06/24(金) 22:01:28 ]
- bison でのエラーメッセージの出し方で質問です。
スクリプト言語を作ろうとしてて 入力にエラーがあったときに詳細なエラーメッセージを出したいんですが どのようにしたらいいでしょうか? 例えば if x != 0 { ^ '(' expected. とか出したいんですが、そもそも「if文の途中」というのが 取れるんでしょうか? また、現在注目しているトークンの値(yylexからの戻り値) はどこかに格納されてるでしょうか?
- 596 名前:デフォルトの名無しさん mailto:sage [2005/06/24(金) 22:08:57 ]
- まあ>>595くらいのレベルがこのスレにちょうどあってる気がする
- 597 名前:デフォルトの名無しさん mailto:sage [2005/06/24(金) 23:12:59 ]
- 見てると、LispとRuby、両方ともアンチが厨なだけに見える。
厨だから、ちょっとこの二つが出てくるとすぐ暴れだして 荒れる。
- 598 名前:デフォルトの名無しさん mailto:sage [2005/06/24(金) 23:18:57 ]
- >>597
わかってないな。 何かを貶す時の基本は度外れに褒めまくること。 そうすれば>>597のようなアホがほいほいつられてくれる。
- 599 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 00:32:42 ]
- >>595
lexerはどうしてるの? Lex等を使わずに自分で書いたのなら、どこまで処理してるかは把握してるのでは? lookahead tokenの値は変数yycharにおさめられてます。
- 600 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 01:21:33 ]
- >>595 bisonのオプション
#define YYERROR_VERBOSE 1 /* Enable verbose error messages. */ マニュアルにも出てるはず > そもそも「if文の途中」というのが > 取れるんでしょうか? bison の error を使えば if文の途中でパース失敗した ときのアクションとか付けられる なんか説明しづらいけどマニュアルのサンプルに出てそう
- 601 名前:デフォルトの名無しさん [2005/06/25(土) 09:59:34 ]
- >>595
すれ違い。 Lisperより
- 602 名前:595 mailto:sage [2005/06/25(土) 10:03:24 ]
- みなさんありがとうございます。これから試してみようと思います。
>599 flexを使ってます。bison側で「@x」と書けば、トークンの位置が取れると www1.kcn.ne.jp/~robe/pf/pf012.html に書いてあったんですがまだ試してません。yycharですか、ありがとうございます。 >600 YYERROR_VERBOSE は試してみました。多少わかりやすいエラーメッセージが yyerrorに与えられるようになったんですが、自動生成じゃなく自分でエラーメッセージを 決めたいんです(Cコンパイラが出すような)。 error は今のところトップレベルでやっちゃってるんで、 そこを文それぞれにもってかないとだめなんですね。
- 603 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 12:44:21 ]
- >>601
死ね。
- 604 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 19:51:54 ]
- >>601 ってなにもの?
Lisp 屋からみてもはずかすぃんだけど...
- 605 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 22:03:06 ]
- >>604
おまぃLisp屋を騙ってる素人だろ。 Lispはプログラムとしていきなり構文木書かせるから、 文法パーサ(yacc, bison, Rie)はイラネェ〜んだよ だから、「コンパイラ/スクリプトの話題に文法パーサはイラネェ」 プログラミングに精通してる人向けのジョークなんじゃねぇ? ;; あ、素人の人には判らない話だから、 ;; そこの人、ムキになって否定しないように・・・
- 606 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 22:06:14 ]
- よく分からんが、>>605 が素人だということはよく分かった
- 607 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 22:15:28 ]
- はいはい、わかったわかった(苦笑
- 608 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 22:16:27 ]
- まあ、大体はあってるんじゃないか。
全くいらないってわけじゃないが、他と比べて 簡単であることは間違いない。
- 609 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 22:19:30 ]
- 文法パーサ・ジェネレータは 使わない。
S式に関する文法は ある。 妙に関心してるのも出てくる始末(苦笑 素人相手にジョーク飛ばすのも大変だなぁ。
- 610 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 22:22:26 ]
- なるほど。
>>605 みたいにスーパーな Lisp 屋ならば、 SICP の超循環評価器なんてイラネェ〜んだろうな。
- 611 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 22:42:27 ]
- >>609
なんだ、お前は「文法パーサ」って言葉でツールの類を指してたのか。
- 612 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 22:49:41 ]
- 601でギャグを言ったつもりだったっぽいなw
- 613 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 22:50:45 ]
- yacc の検索結果のうち 日本語のページ 約 17,600 件中 1 - 10 件目 (0.15 秒)
構文解析器 の検索結果のうち 日本語のページ 約 10,200 件中 1 - 10 件目 (0.23 秒) パーサ の検索結果のうち 日本語のページ 約 53,700 件中 1 - 10 件目 (0.19 秒) パーザ の検索結果のうち 日本語のページ 約 8,720 件中 1 - 10 件目 (0.04 秒) 文法パーサ の検索結果のうち 日本語のページ 約 24 件中 1 - 5 件目 (0.22 秒)
- 614 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 22:58:59 ]
- 久しぶりにに揚足鶏取れたんで、大喜びか。
下らない人間だ
- 615 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 23:00:52 ]
- 「LALR文法パーサ」=構文パーサの一種
バカは覚えときな。
- 616 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 23:06:07 ]
- LALR文法パーサに該当するページが見つかりませんでした。
検索のヒント - キーワードに誤字・脱字がないか確かめてください。 - 違うキーワードを使ってみてください。 - より一般的な言葉を使ってみてください。 - キーワードの数を少なくしてみてください。
- 617 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 23:13:04 ]
- 荒らすなよ
- 618 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 23:14:09 ]
- Googleで検索できない単語は間違っていると信じている、
痛い素人が粘着しているな。哀れな奴
- 619 名前:デフォルトの名無しさん mailto:sage [2005/06/25(土) 23:27:41 ]
- 以前、LALR(1)の書籍orサイトを尋ねたものですが、
なかなかLALRのみっていうのは無いんですね。 ところで、皆さんはどうやって学習されましたか? 学習されたときの書籍とか覚えていましたら、教えて下さい。
- 620 名前:デフォルトの名無しさん mailto:sage [2005/06/26(日) 00:25:28 ]
- >>604
おまぃLisp屋を騙ってる素人だろ。 Lispはプログラムとしていきなり構文木書かせるから、 文法パーサ(yacc, bison, Rie)はイラネェ〜んだよ だから、「コンパイラ/スクリプトの話題に文法パーサはイラネェ」 プログラミングに精通してる人向けのジョークなんじゃねぇ? ;; あ、素人の人には判らない話だから、 ;; そこの人、ムキになって否定しないように・・・
- 621 名前:デフォルトの名無しさん [2005/06/26(日) 00:31:50 ]
- >>620 が素人なのはよくわかった。
- 622 名前:デフォルトの名無しさん mailto:sage [2005/06/26(日) 00:32:51 ]
- はいはい、わかったわかった(苦笑
- 623 名前:デフォルトの名無しさん mailto:sage [2005/06/26(日) 00:34:45 ]
- 別に文法パーサって言葉自体はいいだろ。
ただし、yaccなどのジェネレータを「文法パーサ」と言ってしまってるから 誤解を生むってこと。 なお、googleで検索してる奴はほっとけ。
- 624 名前:デフォルトの名無しさん mailto:sage [2005/06/26(日) 00:36:46 ]
- en.wikipedia.org/wiki/LALR_parser
- 625 名前:デフォルトの名無しさん mailto:sage [2005/06/26(日) 00:38:46 ]
- >>624
で?w
- 626 名前:デフォルトの名無しさん [2005/06/26(日) 00:42:29 ]
- いいですか〜
yaccはパーサではありません。 yaccはパーサを作ってくれるものです。 はい、ここ!試験に出ますよ〜 良い子は覚えておきましょうねぇ〜
- 627 名前:デフォルトの名無しさん mailto:sage [2005/06/26(日) 01:14:56 ]
- >>626
foo.yを解釈するパーサと言えなくもないけどな
- 628 名前:デフォルトの名無しさん mailto:sage [2005/06/26(日) 01:41:04 ]
- 俺の頭はパッパラパーさ(parser)!
- 629 名前:デフォルトの名無しさん mailto:sage [2005/06/26(日) 02:09:28 ]
- >>619
旧DragonBook。 あれを読んでたのは大学のころだな。みんなで輪講して、手でLR(0)itemを列 挙して、lookaheadを求めて、表を作成して…とかやった覚えがある。 ところで、LRパーサーの生成方法を知りたいの? それともyaccの使い方を知りたいの? 前者だったらやっぱりDragonBookを熟読。読んでるだけでは意味不明でも、 簡単な文法(足し算だけの電卓プログラムとか)のLR表を手で生成して みるとわかってくるよ。 後者ならO'Reilly本で足りるでしょう。
- 630 名前:デフォルトの名無しさん mailto:sage [2005/06/26(日) 05:31:33 ]
- >>627
yacc全体をそうは言えない。パース以外の仕事もするから。
- 631 名前:デフォルトの名無しさん mailto:sage [2005/06/26(日) 10:31:04 ]
- 「パーサ=構文解析器」だから「文法パーサ」って馬から落馬系じゃなければ
*.yなどの文法をパースするパーサのこと。 609の「文法パーサ・ジェネレータ」は「コンパイラ・コンパイラ・コンパイラ」って意味だな。
- 632 名前:デフォルトの名無しさん mailto:sage [2005/06/26(日) 14:18:10 ]
- yaccは内部にパーサを持ってはいるんだろうけど、
lispはパーサが要らないんだ!って文章を強引に正しくするために それを持ち出すのは苦しすぎる。
- 633 名前:デフォルトの名無しさん mailto:sage [2005/06/26(日) 14:21:07 ]
- yaccは、*.yをパースしたあと、その情報を使って
新たなパーサを作り出すツールであって、 ただ仕事の過程でパーサを使ってるだけ。 だから、yacc=パーサとは普通いわないし、誤解を生むだけ。 間違ってるといえるかもしれない。
- 634 名前:デフォルトの名無しさん mailto:sage [2005/06/26(日) 21:28:17 ]
- yaccはパーサージェネレーターだろ
- 635 名前:デフォルトの名無しさん mailto:sage [2005/06/26(日) 21:30:42 ]
- lisp にはパーサは要らないって言っているけど、
「んじゃパーサ無しでどうやってS式をパースするんだい」 って話になるんだけどどうしよう
- 636 名前:デフォルトの名無しさん [2005/06/26(日) 21:31:30 ]
- >>629
ちょっと横レスすまんが、 > 旧DragonBook。 って何?新ドラゴンってあるの? それとも21世紀本のこと? > 後者ならO'Reilly本で足りるでしょう。 どうだろうね。俺もその本持ってるけど、 あんまり役に立つとは思えないんだけど。
- 637 名前:デフォルトの名無しさん mailto:sage [2005/06/26(日) 23:05:19 ]
- 相変わらず変なのが粘着してるスレだな。
- 638 名前:デフォルトの名無しさん mailto:sage [2005/06/27(月) 00:20:14 ]
- >>636
初版は1977年、もう絶版だから今の若い人は知らんか。 Principles of Compiler Design Alfred V. Aho, Jeffrey D. Ullman Addison Wesley ISBN 0-201-00022-9 Amazonにも画像が無かったが、ぐぐってみたら www-users.cs.york.ac.uk/~susan/bib/nf/a/alfredvh.htm の上から二番目にあるな。
- 639 名前:デフォルトの名無しさん mailto:sage [2005/06/27(月) 04:44:46 ]
- ああ。その本なら随分前に培風館から出ていたな、Winston Lisp第一版と同じシリーズで
- 640 名前:636 mailto:sage [2005/06/27(月) 21:02:19 ]
- >>629
失礼いたしやした。 大変参考になりやした。 m(_ _)m
- 641 名前:デフォルトの名無しさん mailto:sage [2005/06/28(火) 21:23:10 ]
- 素人です。
相乗り質問で恐縮ですが、LALR(1) の1って先読みトークンの数ですよね? このことは、YACCにシフトされているシンボルの数の最大値が1ということにはつながらないのですか?
- 642 名前:デフォルトの名無しさん mailto:sage [2005/06/28(火) 21:26:35 ]
- 素人です。
>>641 知りません。
- 643 名前:デフォルトの名無しさん mailto:sage [2005/06/28(火) 21:27:41 ]
- っていうかマジレスすると
>YACCにシフトされているシンボルの数の最大値が1 は合っているんだっけ?
- 644 名前:デフォルトの名無しさん [2005/06/28(火) 22:19:16 ]
- ヒロシです。
分からんとです。
- 645 名前:デフォルトの名無しさん [2005/06/29(水) 00:10:28 ]
- >>641
そうです。 LR(k)、LL(k)のkは、高々k個の先読みでパースできる文法(のクラス)を表しています。
- 646 名前:619 mailto:sage [2005/06/29(水) 06:55:18 ]
- >>629
> 旧DragonBook。 > あれを読んでたのは大学のころだな。みんなで輪講して、手でLR(0)itemを列 > 挙して、lookaheadを求めて、表を作成して…とかやった覚えがある。 情報ありがとうございます。 でも、もう手に入らないんですね。 > ところで、LRパーサーの生成方法を知りたいの? > それともyaccの使い方を知りたいの? | > 後者ならO'Reilly本で足りるでしょう。 パーサー自体の生成方法までは、とても考えが及びません。 目的としては、後者です。だとすると、 やはり、O'Reillyの本が定番なんですかね。 入手して、若い頃のようにじっくり勉強してみたいと思います。 (^^; ありがとうございました。
- 647 名前:デフォルトの名無しさん mailto:sage [2005/06/29(水) 07:47:49 ]
- >>646
O'ReillyってLALRの説明まではしてなかったような。 とりあえず使いたいならO'Reillyでいいけど、 yaccを使いこなしたいなら、LALRをきちんと勉強したほうがいい。 コンフリクトしたらシフト優先とか、 自分で変な書式の式を追加するときに、%left とかがどう動くのかとかは LALRを知らないと理解できない。
- 648 名前:デフォルトの名無しさん mailto:sage [2005/06/29(水) 08:05:26 ]
- >>641
LALR(n)だと、 「シフトするトークンは1つだけど、n個先読みしてからシフトするか還元するか決める」 という考え方と 「最大n個シフトしてみて、ダメだったらシフトしなかったことにして還元する」 という考え方ができそう。
- 649 名前:デフォルトの名無しさん mailto:sage [2005/06/29(水) 12:40:16 ]
- LALR(k): k-token LookAhead, Left-to-right parse, Rightmost-derivation,
LL(1): Left-to-right and Left-most Parsing
- 650 名前:デフォルトの名無しさん mailto:sage [2005/07/01(金) 21:58:05 ]
- >>647
で、貴方のお勧めは?
- 651 名前:デフォルトの名無しさん [2005/07/02(土) 21:06:34 ]
- りん(ry
- 652 名前:デフォルトの名無しさん mailto:sage [2005/07/02(土) 21:52:02 ]
- …………… く ず れ す ……………
- 653 名前:デフォルトの名無しさん [2005/07/04(月) 19:03:27 ]
- >>652
恐らく lisper w
- 654 名前:デフォルトの名無しさん mailto:sage [2005/07/04(月) 20:28:29 ]
- ↑間違いなくアンチLISPer w
- 655 名前:デフォルトの名無しさん mailto:sage [2005/07/04(月) 21:55:27 ]
- …………… き ち が い ね ん ち ぁ く ち う 。 よ う ち ゅ う い ……………
- 656 名前:デフォルトの名無しさん [2005/07/05(火) 00:54:08 ]
- >>655
お前が一番の粘着だw
- 657 名前:デフォルトの名無しさん [2005/07/06(水) 21:55:12 ]
- VC++でlexファイル(lex.yy.c)をコンパイルすることはできますか?
Windows版のflexとbisonは見つけたんですが、よく考えたら gccで-ll(flexなら-lfl)オプションを付けないとコンパイルすることができない・・・ そもそも、gccがlflで何を取り込んでいるのかがわからず。 windowsでflex&bisonを使っているひとがいれば、教えていただけないでしょうか。
- 658 名前:デフォルトの名無しさん mailto:sage [2005/07/06(水) 21:58:34 ]
- >>657
lfl は付けなくても平気。中に入っているのは確か main 関数だけだった筈だから
- 659 名前:デフォルトの名無しさん [2005/07/07(木) 12:19:19 ]
- >>657 >>658
yywrap()も入ってるよ。 以下の関数定義をどっかに入れれば大丈夫。 int yywrap(void) { return 1; }
- 660 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 18:00:12 ]
- PHPやPerlでは、変数を $var のように表します。
「$」と「var」のあいだにはスペースを入れることができません。 ということは、字句解析でトークンに分解するときに、「$」と「var」の2つに分解するのではなく、 「$var」というひとつのトークンとして認識しているのでしょうか。 (字句解析が「$」と「var」の2つに分解すると、間にスペースを入れられると思うから。) 「$var」を認識するのに、字句解析で1つのトークンとして認識するのがいいのか、それとも 2つに分解して構文解析時に「$var」であると認識するのがいいのか、迷ってます。
- 661 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 18:26:38 ]
- >>660
1トークンでいいと思うが。2トークンにするメリットが特に見当たらんし。
- 662 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 20:03:51 ]
- 1トークンと考える方が不自然。
2トークンでしょう。(Perl/PHPのソース確認してないけど) 理由: 1. Perlの場合、変数名の前に異なるプリフィクスを使う場合がある。 例)配列宣言 @array、 配列参照 $array[index] 連想配列宣言 %assoc、連想配列参照 $assoc{key} 左側(配列コンテキスト)と、右側(スカラーコンテキスト)を、異なるトークンと認識したら、 変数名管理上、トークンからプリフィクス(@, %, $)を外した名前を切り出す必要があり、 トークンの扱いとして不自然。 2.プリフィクス(@, %, $)と、識別子(var, array, assoc)の間に空白を許すか否かは、 単なる構文定義上の問題であり、2トークンで空白を許さない定義が可能。 いじょ
- 663 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 20:23:45 ]
- PHPに@や%ないじゃん
- 664 名前:660 mailto:sage [2005/07/09(土) 20:27:10 ]
- >>661
ありがとうございます。そんな気はするんですが、いまいち確信がなくて。 >>662 1.の場合でも、プリフィックスと変数名は別々に渡しませんか? 今はトークンを取得する関数gettoken()と、文字列を取得する関数getvalue()を用意していて、次のようにしています。 入力 gettoken() getvalue() ------------------------------ 'foo' STRING "foo" 100 INTEGER "100" 3.14 DOUBLE "3.14" x NAME "x" $var VAR_SCALAR "var" @var VAR_ARRAY "var" %var VAR_ASSOC "var" (最後の2つはつけくわえてみました。) 特に不自然ではないと思うのですが、どうでしょう。自信もないですが。 2. について、「2トークンで空白を許さない」ためのうまい方法がよくわかりません。 よろしければ教えてください。
- 665 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 20:34:41 ]
- 空白もトークンとして切り出せ
- 666 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 21:59:11 ]
- >>665
空白をトークンにするぐらいなら、プリフィクス込みでトークン切り出して、 プリフィクスを取り除いたシンボル名でシンボルテーブル検索した方が 楽だと思うけどなぁ。 まぁ、どっちでも動けば構わんので、あとは趣味の問題だが。
- 667 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 22:27:32 ]
- >>663
PHPにも $hoge = 1; $varname = "hoge"; echo $$varname; // => 1 とかあるけどな!
- 668 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 23:13:32 ]
- Perlで$$は、ポインターの値参照だったっけ
- 669 名前:デフォルトの名無しさん mailto:sage [2005/07/09(土) 23:38:16 ]
- ああ、そうか。
Perl5 だと参照使えるから ${$foo->{'a'}} なんてのもアリなんだな。それだと 確かに字句解析レベルではプリフィクスとシンボル名を分けた方が無難だ。
- 670 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 00:40:01 ]
- >>665
ええっー、空白をトークンとするんですか。 構文解析がかなり面倒になるんですけど。 >>669 「$」のあとに英数字が続けば変数名、それ以外なら「$」であるというのじゃだめでしょうか。
- 671 名前:デフォルトの名無しさん [2005/07/10(日) 00:44:50 ]
- >>664
了解。1トークンで充分だと思う。 Perlの
- 672 名前:671 mailto:sage [2005/07/10(日) 00:46:02 ]
- >>664
了解。1トークンで充分だと思う。 Perlの $って、Cのポインタ演算子みたいな扱いするから、誤解した。
- 673 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 00:47:00 ]
- >>670
そもそも「Perl5 のようなスカラー・配列・ハッシュ、さらにその参照を任意に 組み合わせてデータ構造を作れるような言語にするのか?」ってトコロから 考える必要があるかと。 単に $foo, @foo, %foo, $$foo ぐらいで済む程度の文法なら 670 の案や 1トークン方式で良し。Perl5 フルコンパチにしたければ変数関係だけで {}, [] の のネストが発生するので、ネストは正規言語では処理できない ことを考えると、ある程度は構文解析に逃がした方が楽そう。
- 674 名前:デフォルトの名無しさん [2005/07/10(日) 21:13:41 ]
- いずれにせよ、スレ違い
Li(ry)
- 675 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 21:17:02 ]
- LISPなら字句解析も構文解析も要らないのに。
- 676 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 21:24:23 ]
- すまん。素でわかんないんだが、「LISP は字句解析が要らない」ってのは
1.0 ってのが出てきたとき、それがシンボルか数値かリストかどうかを判断しなくても良いってことなのか? あと、「LISP は構文解析が要らない」ってのは、カッコの対応が取れて無くても気にしないってことなのか?
- 677 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 21:27:15 ]
- >>675-676 ネタ決定
|

|