Привет всем!
Есть лаба по системному программированию. Вообщем-то хотелось бы и в применении паттернов потренероваться. Вообщем, суть ее такова:
Есть файлик с кодом на C++. Проанализирвав его, надо распечатать все вхождения туда вызова конструктора complex из STL, т.е. например из кода:
void main()
{
complex a = new complex(1,2);
int b = 10;
int c = 15;
int d = b + c;
complex f = new complex(b,c);
}
вывести на экран в качестве результата
complex(1,2)
complex(b,c)
Вопрос в том а подойдет ли тут паттерн Интерпретатор (он вроде для подобных вещей применяется)?
И если да, то как?
А какие еще ОО-решения можно использовать?
Здравствуйте, Maslennikov, Вы писали:
M>Привет всем!
M>Есть лаба по системному программированию. Вообщем-то хотелось бы и в применении паттернов потренероваться. Вообщем, суть ее такова:
M>Есть файлик с кодом на C++. Проанализирвав его, надо распечатать все вхождения туда вызова конструктора complex из STL, т.е. например из кода:
M>M>void main()
M>{
M> complex a = new complex(1,2);
M> int b = 10;
M> int c = 15;
M> int d = b + c;
M> complex f = new complex(b,c);
M>}
M>
M>вывести на экран в качестве результата
M>M> complex(1,2)
M> complex(b,c)
M>
M>Вопрос в том а подойдет ли тут паттерн Интерпретатор (он вроде для подобных вещей применяется)?
M>И если да, то как?
M>А какие еще ОО-решения можно использовать?
Паттерн интерпретатор тут не подходит. Он нужен для того, чтобы исполнять программно заданную синтактико-семантическую структуру. Причём эта структура может буть получена и не из исходного кода при помощи парсера, а задана целиком ручками. ИМХО, такая штука практически отменяется в Лиспе, где есть кавычка.
В данном случае следовало бы написать полноценный парсер. Хотя, думаю, хватит и простенького лексера. Тогда нужно просто отследить последовательность лексем 'complex' '(' <число_или_имя> ',' <число_или_имя> ')'. Если же в конструкторе нужно отслеживать выражения, то можно написать и простенький парсер, исключительно для выражений C++. Но это, думаю, уже тянет на курсовую по компиляторам, а не на лабу по СП.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
K>В данном случае следовало бы написать полноценный парсер. Хотя, думаю, хватит и простенького лексера. Тогда нужно просто отследить последовательность лексем 'complex' '(' <число_или_имя> ',' <число_или_имя> ')'. Если же в конструкторе нужно отслеживать выражения, то можно написать и простенький парсер, исключительно для выражений C++. Но это, думаю, уже тянет на курсовую по компиляторам, а не на лабу по СП.
Спасибо.
Выражения отслеживать не надо. На курсовую пока не претендую

, поэтому простого лексического анализатора думаю хватит.
Здравствуйте, Maslennikov, Вы писали:
M>Вопрос в том а подойдет ли тут паттерн Интерпретатор (он вроде для подобных вещей применяется)?
M>И если да, то как?
M>А какие еще ОО-решения можно использовать?
Тут задачка не на архитектуру, а на реализацию. Использовать стоит генератор парсеров, или, если на скорую руку, регексы. Паттерн Interpreter это совсем из другой оперы.
... << RSDN@Home 1.2.0 alpha rev. 642>>