4
Copyright (c) 2022 МГТУ им. Н.Э. Баумана, кафедра ИУ-6, Михаил Фетисов,
6
https://bmstu.codes/lsx/simodo/loom
9
#include "simodo/interpret/builtins/hosts/base/BaseOperationParser.h"
10
#include "simodo/interpret/builtins/hosts/base/BaseInterpret_abstract.h"
11
#include "simodo/bormental/DrBormental.h"
13
namespace simodo::interpret::builtins
16
InterpretState BaseOperationParser::parseNone(BaseInterpret_abstract &host, const ast::Node & )
20
return host.executeNone();
23
InterpretState BaseOperationParser::parsePushConstant(BaseInterpret_abstract &host, const ast::Node & op)
25
// node(PushConstant, constant_value)
27
return host.executePushConstant(op.token());
30
InterpretState BaseOperationParser::parsePushVariable(BaseInterpret_abstract &host, const ast::Node & op)
32
// node(PushVariable, variable_name)
34
return host.executePushValue(op.token());
37
InterpretState BaseOperationParser::parseObjectElement(BaseInterpret_abstract &host, const ast::Node & op)
39
// node(ObjectElement, dot)
41
// ---- node(, variable_name) * 1..1
43
if (op.branches().empty())
44
throw bormental::DrBormental("BaseOperationParser::parseObjectElement", "The structure of the semantic tree is broken");
46
return host.executeObjectElement(op.token(), op.branches().front().token());
49
InterpretState BaseOperationParser::parseFunctionCall(BaseInterpret_abstract &host, const ast::Node & op)
51
// node(FunctionCall, parenthesis)
53
// ---- node() * 0..n (список выражений)
55
return host.executeFunctionCall(op);
58
InterpretState BaseOperationParser::parseProcedureCheck(BaseInterpret_abstract &host, const ast::Node & )
60
// node(ProcedureCheck, )
62
// Предполагается, что оператор ProcedureCheck выполняется сразу после вызова функции/процедуры
64
return host.executeProcedureCheck();
67
InterpretState BaseOperationParser::parseBlock(BaseInterpret_abstract &host, const ast::Node & op)
69
// node(Block, isBeginningOfBlock)
71
return host.executeBlock(op);
74
InterpretState BaseOperationParser::parsePop(BaseInterpret_abstract &host, const ast::Node & )
78
return host.executePop();