Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Паттерн Facade<br />
Однако комитет по стандартизации C++ добавил к языку пространства имен<br />
[Str94], и это позволило разрешать доступ только к открытым классам подсистемы.<br />
Пример кода<br />
Рассмотрим более подробно, как возвести фасад вокруг подсистемы компиляции.<br />
В подсистеме компиляции определен класс BytecodeStream, который реализует<br />
поток объектов Bytecode. Объект Bytecode инкапсулирует байтовый<br />
код, с помощью которого описываются машинные команды. В этой же подсистеме<br />
определен еще класс Token для объектов, инкапсулирующих лексемы языка<br />
программирования.<br />
Класс Scanner принимает на входе поток символов и генерирует поток лексем,<br />
по одной каждый раз:<br />
class Scanner {<br />
public:<br />
Scanner(istream&);<br />
virtual -Scanner();<br />
virtual Token& Scan();<br />
private:<br />
istream& _inputStream;<br />
};<br />
Класс Parser использует класс ProgramNodeBuilder для построения дерева<br />
разбора из лексем, возвращенных классом Scanner:<br />
class Parser {<br />
public:<br />
Parser();<br />
virtual -Parser();<br />
, };<br />
virtual void Parse(Scanners, ProgramNodeBuilder&);<br />
Parser вызывает ProgramNodeBuilder для инкрементного построения дерева.<br />
Взаимодействие этих классов описывается паттерном строитель:<br />
class ProgramNodeBuilder {<br />
public:<br />
ProgramNodeBuilder();<br />
virtual ProgramNode* NewVariable(<br />
const char* variableName<br />
) const;<br />
virtual ProgramNode* NewAssignment(<br />
ProgramNode* variable, ProgramNode* expression<br />
) const;