Re: А подойдет ли тут паттерн Интерпретатор?
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 30.09.06 09:25
Оценка:
Здравствуйте, 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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.