loom

Форк
0
/
BaseOperationParser.cpp 
81 строка · 2.3 Кб
1
/*
2
MIT License
3

4
Copyright (c) 2022 МГТУ им. Н.Э. Баумана, кафедра ИУ-6, Михаил Фетисов,
5

6
https://bmstu.codes/lsx/simodo/loom
7
*/
8

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"
12

13
namespace simodo::interpret::builtins
14
{
15

16
InterpretState BaseOperationParser::parseNone(BaseInterpret_abstract &host, const ast::Node & )
17
{
18
    // node(None, )
19

20
    return host.executeNone();
21
}
22

23
InterpretState BaseOperationParser::parsePushConstant(BaseInterpret_abstract &host, const ast::Node & op)
24
{
25
    // node(PushConstant, constant_value)
26

27
    return host.executePushConstant(op.token());
28
}
29

30
InterpretState BaseOperationParser::parsePushVariable(BaseInterpret_abstract &host, const ast::Node & op)
31
{
32
    // node(PushVariable, variable_name)
33

34
    return host.executePushValue(op.token());
35
}
36

37
InterpretState BaseOperationParser::parseObjectElement(BaseInterpret_abstract &host, const ast::Node & op)
38
{
39
    // node(ObjectElement, dot)
40
    //    |
41
    //    ---- node(, variable_name) * 1..1
42

43
    if (op.branches().empty())
44
        throw bormental::DrBormental("BaseOperationParser::parseObjectElement", "The structure of the semantic tree is broken");
45

46
    return host.executeObjectElement(op.token(), op.branches().front().token());
47
}
48

49
InterpretState BaseOperationParser::parseFunctionCall(BaseInterpret_abstract &host, const ast::Node & op)
50
{
51
    // node(FunctionCall, parenthesis)
52
    //    |
53
    //    ---- node() * 0..n (список выражений)
54

55
    return host.executeFunctionCall(op);
56
}
57

58
InterpretState BaseOperationParser::parseProcedureCheck(BaseInterpret_abstract &host, const ast::Node & )
59
{
60
    // node(ProcedureCheck, )
61

62
    // Предполагается, что оператор ProcedureCheck выполняется сразу после вызова функции/процедуры
63

64
    return host.executeProcedureCheck();
65
}
66

67
InterpretState BaseOperationParser::parseBlock(BaseInterpret_abstract &host, const ast::Node & op)
68
{
69
    // node(Block, isBeginningOfBlock)
70

71
    return host.executeBlock(op);
72
}
73

74
InterpretState BaseOperationParser::parsePop(BaseInterpret_abstract &host, const ast::Node & )
75
{
76
    // node(Pop, )
77

78
    return host.executePop();
79
}
80

81
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.