亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? facade.cpp

?? 設計模式的VC例子
?? CPP
字號:
/*
設計模式例程
根據有關例程綜合而成

石銀峰于2002/04/17在杭州整理
*/
/*
意圖
	為子系統中的一組接口提供一個一致的界面,F a c a d e 模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。 
適用性
	當你要為一個復雜子系統提供一個簡單接口時。子系統往往因為不斷演化而變得越來越復雜。大多數模式使用時都會產生更多更小的類。這使得子系統更具可重用性,也更容易對子系統進行定制,但這也給那些不需要定制子系統的用戶帶來一些使用上的困難。F a c a d e 可以提供一個簡單的缺省視圖,這一視圖對大多數用戶來說已經足夠,而那些需要更多的可定制性的用戶可以越過f a c a d e 層。 
	客戶程序與抽象類的實現部分之間存在著很大的依賴性。引入f a c a d e 將這個子系統與客戶以及其他的子系統分離,可以提高子系統的獨立性和可移植性。 
	當你需要構建一個層次結構的子系統時,使用f a c a d e 模式定義子系統中每層的入口點。如果子系統之間是相互依賴的,你可以讓它們僅通過f a c a d e 進行通訊,從而簡化了它們之間的依賴關系。  
*/

/*
	Compiler
		:........Compile() =======> all of classes...
		
*/

// this project can't running...

#include "../public/defs.h"
#include "../public/Foundation.H"
#include "../public/List.h"

class istream;
class ostream;
class Token;
class ProgramNodeBuilder;
class ProgramNode;
class StatementNode;
class ExpressionNode;
class CodeGenerator;
class BytecodeStream{};

/*****************************************************************************/
// Token
class Token{
	//...
};

/*****************************************************************************/
/* Scanner
*/
class Scanner {
public:
    Scanner(istream&);
    virtual ~Scanner();

    virtual Token& Scan();
private:
    istream& _inputStream;
};

Scanner::Scanner(istream& io): _inputStream(io){
	output("Scanner::Scanner(istream& io): _inputStream(io)\n");
}
Scanner::~Scanner(){
	output("Scanner::~Scanner()\n");
}
Token& Scanner::Scan(){
	output("Token& Scanner::Scan()\n");
	Token *t = new Token;
	return *t;
}

/*****************************************************************************/
/* Parser
*/
class Parser {
public:
    Parser();
    virtual ~Parser();

    virtual void Parse(Scanner&, ProgramNodeBuilder&);
};

Parser::Parser(){
	output("Parser::Parser()\n");
}
Parser::~Parser(){
	output("Parser::~Parser()\n");
}
void Parser::Parse(Scanner&, ProgramNodeBuilder&){
	output("void Parser::Parse(Scanner&, ProgramNodeBuilder&)\n");
}
/*****************************************************************************/
/* ProgramNodeBuilder
*/
class ProgramNodeBuilder {
public:
    ProgramNodeBuilder();
/*
*/
    virtual ProgramNode* NewVariable(
        char* variableName
    ) const;
/*
*/
    virtual ProgramNode* NewAssignment(
        ProgramNode* variable, ProgramNode* expression
    ) const;
/*
*/
    virtual ProgramNode* NewReturnStatement(
        ProgramNode* value
    ) const;
/*
*/
    virtual ProgramNode* NewCondition(
        ProgramNode* condition,
        ProgramNode* truePart, ProgramNode* falsePart
    ) const;
    // ...
/*
*/
    ProgramNode* GetRootNode();
private:
    ProgramNode* _node;
};

ProgramNodeBuilder::ProgramNodeBuilder(){
	output("ProgramNodeBuilder::ProgramNodeBuilder()\n");
	_node = NULL;
}
ProgramNode* ProgramNodeBuilder::GetRootNode(){
	output("ProgramNode* ProgramNodeBuilder::GetRootNode()\n");
	return _node;
}

ProgramNode* ProgramNodeBuilder::NewVariable(
        char* variableName
		) const{
	output("ProgramNode* ProgramNodeBuilder::NewVariable");
	return _node;
}
/*
*/
ProgramNode* ProgramNodeBuilder::NewAssignment(
        ProgramNode* variable, ProgramNode* expression
		) const{
	output("ProgramNode* ProgramNodeBuilder::NewAssignment(\n");
	return _node;
}
/*
*/
ProgramNode* ProgramNodeBuilder::NewReturnStatement(
        ProgramNode* value
		) const{
	output("ProgramNode* ProgramNodeBuilder::NewReturnStatement(");
	return _node;
}
/*
*/
ProgramNode* ProgramNodeBuilder::NewCondition(
        ProgramNode* condition,
        ProgramNode* truePart, ProgramNode* falsePart
		) const{
	output("ProgramNode* ProgramNodeBuilder::NewCondition(\n");
	return _node;
}

// ...
/*****************************************************************************/
/* ProgramNode
*/
class ProgramNode {
public:
    // program node manipulation
    virtual void GetSourcePosition(int& line, int& index);
    // ...
/*
*/
    // child manipulation
    virtual void Add(ProgramNode*);
    virtual void Remove(ProgramNode*);
    // ...

    virtual void Traverse(CodeGenerator&);
protected:
    ProgramNode();
};

/*****************************************************************************/
/* CodeGenerator
*/
class CodeGenerator {
public:
    virtual void Visit(StatementNode*);
    virtual void Visit(ExpressionNode*);
    // ...
protected:
    CodeGenerator(BytecodeStream&);
protected:
    BytecodeStream& _output;
};

CodeGenerator::CodeGenerator(BytecodeStream& io) : _output(io){
	output("CodeGenerator::CodeGenerator(BytecodeStream& io) : _output(io)\n");
}
void CodeGenerator::Visit(StatementNode*){
	output("void CodeGenerator::Visit(StatementNode*)\n");
}
void CodeGenerator::Visit(ExpressionNode*){
	output("void CodeGenerator::Visit(ExpressionNode*)\n");
}

/*****************************************************************************/
/* ExpressionNode
*/
class ExpressionNode : public ProgramNode {
public:
    ExpressionNode();
    virtual void GetSourcePosition(int& line, int& index);
    virtual void Add(ProgramNode*);
    virtual void Remove(ProgramNode*);

    virtual void Traverse(CodeGenerator&);
protected:
    List<ProgramNode*>* _children;
};
/*
*/
void ExpressionNode::Traverse (CodeGenerator& cg) {
	output("void ExpressionNode::Traverse (CodeGenerator& cg) \n");
    cg.Visit(this);

    ListIterator<ProgramNode*> i(_children);

    for (i.First(); !i.IsDone(); i.Next()) {
        i.CurrentItem()->Traverse(cg);
    }
}
/*****************************************************************************/
/* StatementNode
*/
class StatementNode : public ProgramNode{
	//...
};

/*****************************************************************************/
/* VariableNode
*/
class VariableNode : public ProgramNode{
	//..
};

/*****************************************************************************/
/* RISCCodeGenerator
*/
class  RISCCodeGenerator : public CodeGenerator {
public:
    RISCCodeGenerator(BytecodeStream&);
    virtual void Visit(StatementNode*);
    virtual void Visit(ExpressionNode*);
    // ...
};
/*****************************************************************************/
/* StackMachineCodeGenerator
*/
class StackMachineCodeGenerator : public CodeGenerator{
	//...
};

RISCCodeGenerator::RISCCodeGenerator(BytecodeStream& io) : CodeGenerator(io){
	output("RISCCodeGenerator::RISCCodeGenerator(BytecodeStream& io) : CodeGenerator(io)\n");
}
void RISCCodeGenerator::Visit(StatementNode*){
	output("void RISCCodeGenerator::Visit(StatementNode*)\n");
}
void RISCCodeGenerator::Visit(ExpressionNode*){
	output("void RISCCodeGenerator::Visit(ExpressionNode*)\n");
}

/*****************************************************************************/
/* Compiler
*/
class Compiler {
public:
    Compiler(){};

    virtual void Compile(istream&, BytecodeStream&);
};

void Compiler::Compile (
    istream& input, BytecodeStream& output
) {
	output("void Compiler::Compile ");
    Scanner scanner(input);
    ProgramNodeBuilder builder;
    Parser parser;

    parser.Parse(scanner, builder);

    RISCCodeGenerator generator(output);
    ProgramNode* parseTree = builder.GetRootNode();
    parseTree->Traverse(generator);
}

/*
*/
main(){
	output("main()\n");

	BytecodeStream bs;

	Compiler compiler;
	compiler.Compile(cin,bs);

	pause();
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美综合一区二区三区| 国产精品电影院| 国产精品国产三级国产专播品爱网 | 91亚洲国产成人精品一区二区三 | 国产三级精品三级在线专区| 亚洲电影一级片| jlzzjlzz国产精品久久| 精品久久久久久综合日本欧美 | 在线观看国产精品网站| 久久精品男人天堂av| 午夜欧美2019年伦理| 91女人视频在线观看| 国产日产欧美一区二区三区| 久久精品国产亚洲高清剧情介绍| 一本一道波多野结衣一区二区| 国产亚洲va综合人人澡精品 | 欧美一三区三区四区免费在线看| 亚洲男帅同性gay1069| 成人中文字幕电影| 久久亚洲免费视频| 美国毛片一区二区三区| 欧美肥妇毛茸茸| 日韩一区精品字幕| 欧美乱熟臀69xxxxxx| 亚洲高清久久久| 欧美亚洲国产一区在线观看网站| 亚洲美女淫视频| 色婷婷激情久久| 一区二区三区四区视频精品免费 | 国产东北露脸精品视频| 久久亚洲影视婷婷| 国产精品99久久久久久久女警| 亚洲精品一区二区三区福利| 狠狠色狠狠色综合| 国产亚洲1区2区3区| 成人在线视频首页| 国产精品毛片高清在线完整版| 国产成人精品亚洲777人妖 | 精品国产91乱码一区二区三区 | 亚洲欧洲精品成人久久奇米网| 色女孩综合影院| 亚洲国产精品尤物yw在线观看| 欧美日韩日本视频| 日韩**一区毛片| 精品国内片67194| 国产成人日日夜夜| 国产精品久久久久久久久免费相片| 成a人片亚洲日本久久| 亚洲女同女同女同女同女同69| 欧美午夜一区二区三区免费大片| 偷拍日韩校园综合在线| 欧美成人一区二区三区在线观看| 精品在线一区二区三区| 中日韩免费视频中文字幕| 91亚洲精品乱码久久久久久蜜桃| 亚洲成人午夜影院| 欧美精品一区二区三区很污很色的| 国产精品资源在线观看| 国产精品传媒在线| 欧美日韩国产色站一区二区三区| 美女在线视频一区| 中文字幕第一区二区| 欧美性色黄大片手机版| 国内成+人亚洲+欧美+综合在线| 中文字幕巨乱亚洲| 欧美精品tushy高清| 国产东北露脸精品视频| 亚洲动漫第一页| 国产蜜臀97一区二区三区| 欧美在线免费视屏| 国产久卡久卡久卡久卡视频精品| 亚洲精品日韩一| 久久嫩草精品久久久精品一| 色哟哟国产精品免费观看| 狠狠色丁香婷综合久久| 一区二区三区四区在线播放| 久久久精品蜜桃| 在线播放欧美女士性生活| 国产美女视频91| 五月天激情综合| 成人欧美一区二区三区小说| 精品国产乱码久久久久久蜜臀| 91福利精品视频| 不卡视频在线观看| 久久精品二区亚洲w码| 亚洲精品美腿丝袜| 欧美激情中文不卡| 日韩欧美精品在线视频| 欧美专区亚洲专区| av中文字幕一区| 国产精品亚洲人在线观看| 天天色图综合网| 又紧又大又爽精品一区二区| 国产精品人妖ts系列视频| 日韩免费看的电影| 91精品国产aⅴ一区二区| 91久久线看在观草草青青| 不卡的av网站| 国产sm精品调教视频网站| 极品美女销魂一区二区三区免费| 肉色丝袜一区二区| 亚洲夂夂婷婷色拍ww47| 国产精品福利一区| 国产精品九色蝌蚪自拍| 欧美激情一区二区三区在线| www国产亚洲精品久久麻豆| 亚洲精品欧美在线| **网站欧美大片在线观看| 日本一区二区视频在线| 国产欧美精品一区| 国产婷婷色一区二区三区| 久久精品在线免费观看| 久久影视一区二区| 欧美精品一区视频| 久久精品在线免费观看| 久久精子c满五个校花| 欧美精品一区二区在线观看| 久久久夜色精品亚洲| 久久综合久色欧美综合狠狠| 久久精品欧美一区二区三区不卡| 国产欧美日韩亚州综合| 国产精品久线在线观看| 亚洲免费观看在线观看| 亚洲国产精品人人做人人爽| 香蕉加勒比综合久久| 美女网站色91| 高潮精品一区videoshd| 99re这里只有精品首页| 色综合久久99| 3d成人动漫网站| 国产婷婷色一区二区三区四区| 中国色在线观看另类| 亚洲精品国产成人久久av盗摄| 图片区小说区区亚洲影院| 精品写真视频在线观看 | 国内成人免费视频| 成人性生交大合| 91官网在线观看| 6080亚洲精品一区二区| 欧美精品一区二区久久婷婷| 欧美国产精品一区二区三区| 亚洲精品乱码久久久久| 久久黄色级2电影| heyzo一本久久综合| 欧美亚洲禁片免费| 久久精品一区二区三区av| 一区二区三区在线观看视频| 麻豆国产一区二区| 本田岬高潮一区二区三区| 制服丝袜中文字幕一区| 国产精品欧美综合在线| 奇米888四色在线精品| 成人国产精品免费观看动漫| 91精品黄色片免费大全| 国产精品入口麻豆九色| 婷婷开心激情综合| 国产99久久精品| 欧美一区二区三区男人的天堂| 国产精品情趣视频| 久久国产精品99精品国产| 色噜噜久久综合| 欧美国产日韩精品免费观看| 免费高清成人在线| 欧洲精品视频在线观看| 国产精品嫩草99a| 久久精品国产一区二区| 欧美性高清videossexo| 国产精品成人免费精品自在线观看| 偷偷要91色婷婷| 欧美影视一区二区三区| 亚洲欧洲另类国产综合| 国产成人免费网站| 日韩免费视频一区二区| 香蕉成人伊视频在线观看| 91在线观看地址| 国产亚洲成aⅴ人片在线观看| 麻豆精品精品国产自在97香蕉| 欧美色电影在线| 一区二区三区国产| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 一区二区三区在线观看网站| 欧美日韩综合色| 一区二区三区日韩欧美| 成人av网站在线观看免费| 久久精品亚洲麻豆av一区二区| 免费的成人av| 91精品国产欧美一区二区| 婷婷久久综合九色综合伊人色| 欧美亚洲尤物久久| 亚洲人成小说网站色在线| 99精品视频在线观看| 国产精品视频第一区| 国产精品一区二区无线| 久久精品在线免费观看| 国产精品综合在线视频| 久久麻豆一区二区| 丁香桃色午夜亚洲一区二区三区| 久久久亚洲高清| 成人夜色视频网站在线观看| 国产精品你懂的在线欣赏|