Задать вопрос
@Mizafix

Правильно ли выражение парсится в ПОЛИЗ форму?

Пишу простой интерпретатор.
для такого кода:
a = 10;
    b = a + 10;
    i = 12;
    if (i > 0 and 12 <= 4)
    {
        output i;
    }


Представление в ПОЛИЗ (со стеком):
{'type': 'PUSH', 'value': '10'}
{'type': 'SET', 'variable': 'a', 'value': {'type': 'constant', 'value': '10'}}
None
{'type': 'PUSH', 'value': 'a'}
{'type': 'PUSH', 'value': '10'}
{'type': 'ADD', 'left': {'type': 'identifier', 'name': 'a'}, 'right': {'type': 'constant', 'value': '10'}}
{'type': 'SET', 'variable': 'b', 'value': {'type': 'operation', 'operator': '+', 'left': {'type': 'identifier', 'name': 'a'}, 'right': {'type': 'constant', 'value': '10'}}}  
None
{'type': 'PUSH', 'value': '12'}
{'type': 'SET', 'variable': 'i', 'value': {'type': 'constant', 'value': '12'}}
None
{'type': 'PUSH', 'value': 'i'}
{'type': 'PUSH', 'value': '0'}
{'type': 'CMP', 'left': {'type': 'identifier', 'name': 'i'}, 'right': {'type': 'constant', 'value': '0'}}
{'type': 'PUSH', 'value': '12'}
{'type': 'PUSH', 'value': '4'}
{'type': 'CMP', 'left': {'type': 'constant', 'value': '12'}, 'right': {'type': 'constant', 'value': '4'}}
[{'type': 'JZ', 'condition': {'type': 'condition', 'operator': 'and', 'left': {'type': 'comparison', 'operator': '>', 'left': {'type': 'identifier', 'name': 'i'}, 'right': {'type': 'constant', 'value': '0'}}, 'right': {'type': 'comparison', 'operator': '<=', 'left': {'type': 'constant', 'value': '12'}, 'right': {'type': 'constant', 'value': '4'}}}, 'label': 'end_if_0'}, {'type': 'LABEL', 'name': 'end_if_0'}, {'type': 'if_statement', 'condition': {'type': 'condition', 'operator': 'and', 'left': {'type': 'comparison', 
'operator': '>', 'left': {'type': 'identifier', 'name': 'i'}, 'right': {'type': 'constant', 'value': '0'}}, 'right': {'type': 'comparison', 'operator': '<=', 'left': {'type': 'constant', 'value': '12'}, 'right': {'type': 'constant', 'value': '4'}}}, 'body': [{'type': 'OUTPUT', 'value': [{'type': 'PUSH', 'value': 'i'}, {'type': 'identifier', 'name': 'i'}]}], 'else_body': None}]


Правильно ли я понял алгоритм преобразования или он должен быть еще более подробным?
  • Вопрос задан
  • 19 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы