• 締切済み

コンパイラの授業課題で分からない問題があります。教えてください

「簡単な例」の仕様を各自で拡張し(少なくとも2項目)、それが処理できるようにスキャナソース、パーザソースを作成せよ。 仕様の拡張の例としては、例えば次のようなものがある(が、これらの例以外を行うこと)。 変数に、さらに"PP", "QQ"が使えるようにする。プログラム例は下記の通り。 A=3*4-4; PP=A*A; QQ=PP+A; print PP; print QQ; print文の文法に、複数(任意個)の変数が使えるような拡張する。プログラム例は下記の通り。 A=3*4-4; B=A*A; print A, B; 冪乗計算(**)が使えるようにする。 A=10; B=3; C=A**B; print C; いくつかの初等関数(sqrtなど)が使えるようにする。 A=10*10; B=sqrt(A); print B; 「簡単な例」を参考に、 1次元配列を使えるようにするにはどのようにソースを変更すれば良いか考えよ。なお、配列は"dimension"を使って宣言する。配列名は"AA","BB","CC","DD"に限定する。 dimension AA[3]; A=9; B=2; AA[0]=2; AA[1]=A*A; AA[B]=A*A*A; print AA[0]; print AA[1]; print AA[2]; お願いします。

みんなの回答

  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.2

この分野に関しては浅い知識しかありませんが、 質問文を見て何点か気になる点があります。 > 「簡単な例」の仕様を各自で拡張し(少なくとも2項目)、 (質問1) 「簡単な例」というのは何を指すのでしょうか? 課題文に書かれている拡張例のことではありませんよね? おそらくパーザを作るためのソースか何かだと思うのですが。 > それが処理できるようにスキャナソース、パーザソースを作成せよ。 (質問2) パーザ生成器に何を使っているのでしょうか? yaccとJavaCCのパーザソースは見たことがありますが、 パーザ生成器が異なればソースの書き方も違かったはずです。 多分、スキャナソースも同様のことが言えると思います。 > 仕様の拡張の例としては、例えば次のようなものがある(が、これらの例以外を行うこと)。 > お願いします。 (質問3) 質問者さんは一体どういう拡張をしたいのでしょうか? 課題文に書かれている拡張例「以外」の拡張をするのが1つ目の課題ですよね。 課題文の拡張例は必要ないので、質問者さんがしたい拡張を書いて下さい。 > コンパイラの授業課題で分からない問題があります。教えてください (質問4) 回答者は結局何を教えればよいのでしょうか? 質問文中に課題文は書かれていますが、 「その課題に対して何を教えてほしいのか」ということがどこにも書いてないです。 質問者さんは一体何を答えてほしいのでしょうか? 課題のどこまでが自力でできて、どこで行き詰ったのでしょうか? 質問は以上です。 これらのことを明確にしないと、他の回答者の方々も答えづらいと思います。 その結果、質問者さんも望む回答を得られないと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 積分の問題

    2du / (sqrt(u*u + a - b)) の積分が 2log | u + sqrt(u*u + a - b)|となるそうです。 ここで、duは変数uでの積分を表し、sqrtは根を取る計算です。 上の式の場合、どういう変数変換をすべきななのか分かりません。なんらかのヒントをお願いいたします。

  • 正規表現でパターン部分を変数処理できますか?

    正規表現でパターン部分を変数にできるのでしょうか? $source = qq{*** テスト ***}; $pattern = qq{テスト}; if($source =~ /$pattern/g){ print "match"; }

    • ベストアンサー
    • Perl
  • 配列のコピー及び printの .と,の挙動の違い

    以下、Perlの仕様についてわからないことが2点あります。 1) 配列のコピーは実態をコピーするようですが、参照扱いになるのは引数で与えた時でしょうか? 2) 下の例で@aは 6という個数を返し、@bは 1bcという配列の中身を返します。printの.と,で挙動が変わる理由が知りたいです。 例) my @a = qw(1 2 3 a b c); my @b = @a; splice @b, 1, 3; print @a . "\n"; # 6 print @b , "\n"; # 1bc

    • ベストアンサー
    • Perl
  • 正規表現の書き方に困っております。

    あるSQLのダンプを変換するプログラムをPerlで書いているのですが、 うまく正規表現が書けなくて困っております。 データの途中に,が有ると、うまくいきません。 ''の中に囲まれた,は無視するという正規表現を書きたいのです。 また、'''B'も正しく処理できれば、完璧です。 #!/usr/bin/perl use strict; use warnings; #my $a = qq{'A','B',1}; --> うまくいく  ['A']['B'][1] #my $a = qq{'A,','B',1}; --> うまくいかない ['A] ['] ['] my $a = qq{',','''B',1}; --> もっとうまくいかない ['][']['] if($a =~ /(.+?),(.+?),(.+?)/){ print "[$1]\n"; print "[$2]\n"; print "[$3]\n"; }else{ print "ERR!\n"; } exit; __END__

    • ベストアンサー
    • Perl
  • スモールコンパイラの制作という参考書について

     現在大学で, 「スモールコンパイラの制作で学ぶプログラムのしくみ」という参考書を勉強しているのですが, 出題された課題の中でどうしても解らない問題があるのです.上記の参考書を学習した方だけではなく, 幅広い方からご教授を頂きたいと思っておりますので何卒宜しくお願いいたします.  課題の内容は, (1) 関数の引数として 1 次元配列を渡せるように機能拡張せよ.   渡し方は C言語の方法に習え.すなわち, 配列の要素全体のコピーを渡すのではなく, 配列の先頭の番地を渡せ.以下のプログラム ( 配列の要素の和と配列のコピー ) で動作を確認せよ.    I sum(aI a[], I n){ vI s = 0, i; for(i = 0; i < n; i = i+1;){ s = s + a[i]; } return s; } aI a[16]; for(i = 0; i < 16; i = i+1;){ a[i] = i * i; } println sum(a, 16); }$  { I copy(aI a[], aI b[], I n){ vI i; for(i = 0; i < n; i = i+1;){ b[i] = a[i]; } return 0; } vI i; aI a[16], b[16]; for(i = 0; i < 16; i = i+1;){ a[i] = i; } dummy = copy(a, b, 16); for(i = 0; i < 16; i = i+1;){ println b[i]; } }$  用いるコンパイラは Java 言語で記述されており, ソースファイルは, http://book.gihyo.co.jp/s-com/ から取得できるようになっております.宜しくお願いいたします.

  • 変数と配列をそれぞれ説明しなさい.また,問題によっては変数よりも配列を

    変数と配列をそれぞれ説明しなさい.また,問題によっては変数よりも配列を用いた 方が適切にプログラムを作成できる場合がある.どのようなケースか,具体的な例を用 いて説明しなさい.という課題があるのですが、特に「問題によっては変数よりも配列を用いた 方が適切にプログラムを作成できる場合がある.どのようなケースか」というのがものすごくわかりにくいです。申し訳ありませんが教えてください。

  • if と配列の組み合わせ

    なにやら思いつかなかったのでこちらで相談します。 配列のaと変数bがこんな感じだったとします。 int a[4]={1,3,4,7}; b=6; もしbが配列aのどの数字にも当てはまらないならこうしますよ もしbが配列aのどれかの数字に当てはまるならこうしますよ といったプログラムを作りたいのですが短く処理できる プログラムを思いつきません。(理論演算子を使えば長くなる) どうすれば短く処理できますか?

  • 数A背理法のもんだいについて

    【問題】 √6が無理数であることを、背理法を用いて証明せよ。 という問題の解答について質問です 【解答】 √6=b/a(a、bは整数)と表せると仮定すると、√6a=bより、両辺を2乗して、 6aa=bb・・・(1) ★aa,bbにふくまれる素数2の累乗の指数は、いずれも偶数であるから 6aa=2・3・aaに含まれる2の累乗の指数は奇数、bbに含まれる2の累乗の指数は偶数であり、素因数分解の一意性より6aa≠bbとなり、(1)に矛盾★ ゆえに、√6は無理数である ★ではさんだ部分がよくわかりません… あと、別解として √6が有理数だとすれば、√6=q/p(p,qは互いに素な自然数(整数?))と表せる。 これより、6pp=qq ☆左辺が2で割り切れるので右辺も2で割り切れなければならず、qは2で割り切れる。 よって、右辺が4で割り切れるので左辺も4で割り切れなければならず、qも4で割り切れる。☆ これは、p、qが互いに素であることに矛盾する。 ゆえに、(背理法により、)√6は無理数である も可能でしょうか? でも☆の部分で、「左辺に6ってあるから2じゃなくて3で割り切れるので~」という風にもなる…?とか考え出したらよくわからなくなっちゃって… ★の部分と☆の部分についてお願いします(> <)

  • 配列の数を途中で増やすには?

    はじめまして。 この度、以下のようなプログラムを作りました。 が、途中で配列の数を増やすことになってしまいました。 ------------------------------------------------ struct a{ int int_a; long int_b; }; struct b{ a *aa; }; void main(void){ b *bb; bb = new b[3]; bb[0].aa = new a[5]; bb[1].aa = new a[4]; . . . } ------------------------------------------------ 具体的には、'bb'の配列を3から5に増やすようなやり方を探しています。 元の配列より大きい配列をつくり、そこにコピーすればいいと考えたのですが、 'bb'内の'aa'の配列も動的に作成しているため、それも出来ない状況です。 どなたかやり方を知っている方がいましたら、教えていただきたいです。 下手な説明ですいません。

  • 変数名を $_ にしたくない

    &xxx("AA","BB"); sub xxx{print @_} ↑のソースで sub に @_ という名前の配列に 引数を渡すことができたけど、@z という名前の配列に 引数を渡したい場合はどういうソースになるんですか? {print @_} は {print @_;} のようにセミコロンを 書いてあるのが普通だと思うけど、このような場合は セミコロンを省略して問題があったりしますか? 下の foreach についても $_ というのを $z にするには どういうソースにしたらいいか教えてください。 $xx{"A"}= "aaa"; $xx{"B"}= "bbb"; $xx{"C"}= "ccc"; foreach(keys %xx){print "添え字は$_で値は$xx{$_}<br>"}

    • ベストアンサー
    • CGI
このQ&Aのポイント
  • エレコム製品の使い方と仕様について詳しく教えてください。
  • 製品の説明書や電源アダプターがないため、使用方法を知りたいです。
  • エレコム株式会社の製品の使い方を教えてください。
回答を見る