とおりすがりのものですが
# 悪いのは yacc じゃなくて Stroustrup です。
C++ の文法を yacc で記述するのは、 yacc の使い方がもう少しわかってから (普通の文法で練習してから) にしたほうが良いような気がしますが如何でしょうか ?
# たとえば XML の文法は、割と、すなおに変換できます (できました)。ただし lexer が面倒みたいですが ...
typedef 名に細工すれば、辛うじて yaccable になるというのは C の場合の話と思います。
> うまくいかないというのは、conflictが発生しまくっている状態です。
これは C++ 自体がそういう文法なので、文法通りに入れるとそうなるという話です。
(C++ は yacc ではなくて、下向き解析を前提にしているような話があったと思います。)
# btyacc (back track yacc) とか使えば、どうにかなるのかもしれないですけど ...
> また、C++をyaccに反映した参考書や参照テキストなどありましたらご教授ください。
C++ を yacc で書いたものとしては、完全ではありませんが J.Roskind のものが有名と思います。(探せばすぐに見つかります。)
# g++ のソースは参考になるのかなぁ ?
yacc の一般的な使い方は ASCII から出ている「lex & yacc プログラミング」も良いのではないかと思います。
ちなみに英語で良ければ bison の info ファイル (ただ) が、徳丸さんの書かれている訳書とほぼ同じと内容と思います。(アスキーの BISON ももしかすると Copyleft かもしれませんけど。)
# 新しいドラゴンブックを入手して はや 10 年 ... 未だに読み終えてない ...
よしへさん、こんにちは。
JavaScriptコードを見ました。概ね良いのですが、細かいところで2箇所修正が必要でした。
1.document.textform...の間違い
誤:document.textform.select.value = msg;
正:document.textform.color.value = msg;
2.selectの呼び出し側の間違い
誤:javascript:select(2>
正:javascript:select(2)
この2点の修正で動くようになります。
JavaScriptはデバッグが大変ですね。がんばってください。
徳丸 浩さん
とりあえず、作ったスクリプトを書きます。(初心者なものでただ改造しただけです)
<SCRIPT>
// ラジオボタンの設定
function select(n) {
var msg;
switch(n){
case 0:
msg = "赤ですね";
break;
case 1:
msg = "緑っていうか黄緑";
break;
case 2:
msg = "青っぽい";
break;
default:
msg = "";
break;
}
document.textform.select.value = msg;
}
<IMG SRC="rgb.gif" USEMAP="#MAP01" BORDER="0">
<MAP NAME="MAP01">
<AREA SHAPE="RECT" COORDS="5,5,54,24" HREF="javascript:select(0)">
<AREA SHAPE="RECT" COORDS="5,30,54,49" HREF="javascript:select(1)">
<AREA SHAPE="RECT" COORDS="5,55,54,74" HREF="javascript:select(2>">
</MAP>
<FORM NAME="textform">
<INPUT type="text" name="color" >
アップもしてみましたので必要だったら見て下さい。↓
画像はつかわせてもらいました。
Misawaさん、はじめまして。席亭のオケゲムです。
アクション部を取り除くプログラムは、どういう動機で作られたのでしょうか?
既存のyaccプログラムを読むためかな?
今後も時々遊びに来てくださいね。
はじめまして、私、Misawa と申します。
最近Vectorでkmyacc用の補助ツールを公開しました。
機能は、構文規則部のアクション部を取り除きます。
よろしければ、使ってやって下さい。
http://www.vector.co.jp/soft/dos/prog/se183673.html
よしへさん、インプリメンタの部屋にようこそ。席亭のオケゲムです。
ラジオボタンではなくテキストボックスということですが、やってみたところ
特に問題はなさそうですが、どのあたりで詰まっていますか?現象として
どうなりますか?(エラーメッセージとか)
もう少し詳しく教えてもらえませんか?
pangmerさん、インプリメンタの部屋にようこそ。C++の文法を入力されているのですか。
すごいですね。
というのは、yaccではC++の構文解析をするのが、簡単ではないからです。いろいろ細工
が必要だと思います。問題の一つは(C言語でもそうですが)typedefされた型名や
class名の扱いですね。intやdoubleは予約語だから簡単ですが、typedefした名前は通常の
名前と区別がつかないので、そのままではyaccで書けません。
ではどうするかというと、字句解析フェーズで、typedefされた名前を検知して、もしtyedefされていたら「typedefされた名前」という特別な字句を返すようにすることです。
詳しくは、「Bison入門」(ストールマン他著、アスキー)の第7章「文脈依存の処理」
をご覧下さい。
はじめまして
クリッカブルマップによるJavaScript起動
のページのことで質問なんですが、
別に設置しているラジオボタンにチェックを入れるのではなく、
別の設置しているフォームの一行の入力フィールド(複数行でもいいのですが)に
コメントなどをいれたいのですが、
このようなことはできるんでしょうか。
自分で作ってみたのですがどうもうまくいきません。
よろしくお願いします。
どうもはじめまして。
いつも楽しく拝見させていただいています。
私もYACCやLEXを使用して便利なツールでも作りたいと思い。
ちまちまと、がんばっておりますが、BNF表記からYACCへの反映に手こずっております。
ISO C++の仕様書(grammar)をみながらYACCへ反映させているのですが
どうも、うまくいきません。YACCの表記方法自体、初歩部分しかわかっていないからだと思いますが、みなさんはどのようにBNF->YACCへ反映されているのですか?
うまくいかないというのは、conflictが発生しまくっている状態です。
また、C++をyaccに反映した参考書や参照テキストなどありましたらご教授ください。
福田さん、インプリメンタの部屋にようこそ。
JavaScriptの日付処理は、一般にはDateオブジェクトを用います。しかし、この場合は、
単なる数値計算でもいけるかもしれません。やりたいことが今ひとつ不明確なので、あまり
断定的なことがいえないのですが。
えーっと、例をあげてもらえませんか?
例えば、2001年1月31の0年1ヵ月後を2001年2月31日としたら変ですよね。
プログラムにするのであれば、もう少し厳密な仕様が必要だと思います。