「コンパイラ・スクリ ..
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