Переписать код лексера, парсера и генератора псевдокода на Python
Суть задачи состоит в том, что есть текстовый файл с кодом паскаль, для которого нужно написать лексер, который выводит поэлементно выводит этот элемент и его тип. Нужно написать парсер, который строит дерево грамматики этого кода, и генератор псевдокода, который строится на этой грамматике. Есть уже полуготовая программа, которая выводит это все, следует изменить структуру и вид этих программ, не меняя функционал, плюс добавить файл Main, через который все другие файлы будут запускаться.
код паскаль:
('KEYWORD', 'program')
('IDENTIFIER', 'my_compiler')
('SEPARATOR', ';')
('KEYWORD', 'var')
и тд.
Пример вывода для парсера:
ProgramNode(name=my_compiler)
VarSection:
VarSectionNode:
Variable(name=a, type=integer)
Variable(name=b, type=integer)
Variable(name=c, type=integer)
Variable(name=name, type=string)
Body:
AssignmentNode(identifier=a)
LiteralNode(value=1)
и т.д
Пример вывода генератора:
Начало программы my_compiler:
Обьявить a с типом integer;
Обьявить b с типом integer;
Обьявить c с типом integer;
код паскаль:
program my_compiler;Пример вывода для лексера:
var
a, b, c: integer;
name: string;
begin
a := 1;
b := 5;
c := 0;
while (a < b) do
begin
c := c * 10 + a;
a := a + 1;
end;
if (c = 0) then
begin
name := 'Buddy!';
end;
if (c < b) then
begin
name := 'Guy!';
end
else
begin
name := 'World!';
end;
writeln('Hello, ' + name)
end.
('KEYWORD', 'program')
('IDENTIFIER', 'my_compiler')
('SEPARATOR', ';')
('KEYWORD', 'var')
и тд.
Пример вывода для парсера:
ProgramNode(name=my_compiler)
VarSection:
VarSectionNode:
Variable(name=a, type=integer)
Variable(name=b, type=integer)
Variable(name=c, type=integer)
Variable(name=name, type=string)
Body:
AssignmentNode(identifier=a)
LiteralNode(value=1)
и т.д
Пример вывода генератора:
Начало программы my_compiler:
Обьявить a с типом integer;
Обьявить b с типом integer;
Обьявить c с типом integer;