А подойдет ли тут паттерн Интерпретатор?
От: Maslennikov Украина  
Дата: 29.09.06 20:35
Оценка:
Привет всем!
Есть лаба по системному программированию. Вообщем-то хотелось бы и в применении паттернов потренероваться. Вообщем, суть ее такова:
Есть файлик с кодом на 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)


Вопрос в том а подойдет ли тут паттерн Интерпретатор (он вроде для подобных вещей применяется)?
И если да, то как?
А какие еще ОО-решения можно использовать?
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>>
Re[2]: А подойдет ли тут паттерн Интерпретатор?
От: Maslennikov Украина  
Дата: 30.09.06 10:56
Оценка:
K>В данном случае следовало бы написать полноценный парсер. Хотя, думаю, хватит и простенького лексера. Тогда нужно просто отследить последовательность лексем 'complex' '(' <число_или_имя> ',' <число_или_имя> ')'. Если же в конструкторе нужно отслеживать выражения, то можно написать и простенький парсер, исключительно для выражений C++. Но это, думаю, уже тянет на курсовую по компиляторам, а не на лабу по СП.

Спасибо.
Выражения отслеживать не надо. На курсовую пока не претендую , поэтому простого лексического анализатора думаю хватит.
Re: А подойдет ли тут паттерн Интерпретатор?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.10.06 15:42
Оценка:
Здравствуйте, Maslennikov, Вы писали:

M>Вопрос в том а подойдет ли тут паттерн Интерпретатор (он вроде для подобных вещей применяется)?

M>И если да, то как?
M>А какие еще ОО-решения можно использовать?

Тут задачка не на архитектуру, а на реализацию. Использовать стоит генератор парсеров, или, если на скорую руку, регексы. Паттерн Interpreter это совсем из другой оперы.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.