Я выполняю курсовую работу по проектированию транслятора кода (Перевод кода Паскаль в аналогичный код на С++).
Этапы анализа делятся на
- Лексический анализ: проводится парсинг кода Паскаль на токены.
То есть кодбудет преобразован к массиву/списку токеновprogram test;
begin
writeln('123');
end.tokens = [['Lx_PR', 'program'], ['Lx_ID', 'test'], ['Lx_SMCLN', ';'], ['Lx_BGN', 'begin'], ['Lx_WRT', 'writeln'], ['Lx_LBR', '('], ['Lx_STR', '\'123\''], ['Lx_RBR', ')'], ['Lx_SMCLN', ';'], ['Lx_END', 'end'], ['Lx_DOT', '.']]
- Синтаксический анализ - необходимо представить список токенов к дереву(AST, дерево абстрактного синтаксиса) - Вот здесь я испытываю затруднение с написанием алгоритма.
- Какой подход необходимо применить при написании абстрактного синтаксического дерева? Хотя бы на том списке токенов, который я привел?
Я бы с удовольствием использовал библиотеку PyPY (Lex - Yacc), но в требованиях к курсовой указано не использовать готовый функционал.