「コンパイラ・スクリ ..
[2ch|▼Menu]
751:デフォルトの名無しさん
07/04/27 23:40:54
>>750
> 同じカーニハンの「プログラミング作法」では関数マクロは使うなみたいなことが
> 書いてあるらしい(Amazonより)のでプリプロセッサが嫌いなのかと思いました。

「プログラミング作法」のほうだと思う。
ただし、「プログラミング作法」に載ってるのはFortran用の
プリプロセッサーの話。
Cのプリプロセッサーではないので注意。

752:745
07/04/28 01:00:12
プログラミング作法 第1章「スタイル」関数マクロはなるべく使うな etc
URLリンク(www.ascii.co.jp) (2000/11)
 ↑
プログラム書法 (プログラミング作法の前版 記述言語は Fortran,PL1)
URLリンク(d.hatena.ne.jp) (1982/06)
プログラム書法 メモ
URLリンク(www.6809.net)
 ↑
ソフトウェア作法 使用言語 は RatFor (1981年)
Ratfor - Wikipedia
Wikipedia項目リンク

発刊された年順に並べるとsoft作法->prog書法->prog作法

soft作法(Fortran) -> orz
prog書法(Fortran,PL1) -> prog作法(C)

あれっ、soft作法はアップトゥデートされてなwwwww

こんなかんじですた (調べるのめんどい)

753:612
07/04/28 01:41:25
自己フォロー。 boost::spirit v1.8 にstored_parserなんていうのがありました。
正しく求めていたのですな。こんなことができました。ソースコードベタはり

#include <iostream>
#include <conio.h>
#include <boost/spirit.hpp>
#include <boost/spirit/dynamic.hpp>
#include "main.hpp"
using namespace boost::spirit;

template<typename ScannerT>
class TSetToken {
public:
   TSetToken(boost::spirit::stored_rule<ScannerT>& target) : target_(target) {}
   void operator()(const char* begin, const char* end) const {
      target_
         =  target_.copy()
         | str_p(begin, end)
         ;
   };
private:
   boost::spirit::stored_rule<ScannerT>& target_;
};

754:デフォルトの名無しさん
07/04/28 01:43:06
おっと、誤)stored_parser 正)stored_ruleですな。

struct TProgramGrammar : public grammar<TProgramGrammar> {
   template <typename ScannerT>
   struct definition {
      boost::spirit::stored_rule<ScannerT> program, block;
      definition(TProgramGrammar const& self) {
         program
            =  +block
            ;
         block
            =  '(' >> (+alpha_p)[TSetToken<ScannerT>(block)] >> ')'
            ;
      };
      const stored_rule<ScannerT>& start() const { return program; }
   };
};

int main() {
   {
      TProgramGrammar p;
      std::cout << parse("a", p, space_p).full << std::endl; // false
   } {
      TProgramGrammar p;
      std::cout << parse("(a) a", p, space_p).full << std::endl; // true
   }
   std::cout << "Press any key" << std::endl;
   getchar();
   return 0;
}



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

4893日前に更新/194 KB
担当:undef