-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathICodeGen.cs
More file actions
88 lines (60 loc) · 3.59 KB
/
ICodeGen.cs
File metadata and controls
88 lines (60 loc) · 3.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Compiler
{
interface ICodeGen
{
//подключает указанную функцию
void Import(Symbols.Var func);
//объявляет переменную, возвращает ее адрес
void Decl(Symbols.Var var);
//достает из стека адрес элемента и возвращает в стек значение лежащее по удресу
void Value(Symbols.Type t_val);
void StartProc(Symbols.Func f);
void EndProc();
void ToInt(int size = 4);
void ToFloat(int size = 8);
void Call(Symbols.Func func);
//добавляет в стек константу
void Push(Syntax.Const constant);
//добавляет в стек переменную
void Push(Syntax.Identifier identifier);
//удаляет из стека элемент
void Pop();
//достает из стека два элемента, записывает значение второго элемента по адресу первого
void Mov();
//достает из стека два элемента, складывает их и кладет результат в стек
void Add();
//достает из стека два элемента, вычитает из второго первое и кладет результат в стек
void Sub();
//достает из стека два элемента, перемножает их и кладет результат в стек
void Mul();
//достает из стека два элемента, ищет целую часть от деления второго на первое и кладет результат в стек
void Div();
//достает из стека два элемента, ищет остаток от деления второго на первое и кладет результат в стек
void Mod();
//достает из стека элемент, меняет знак на противоположный и кладет результат в стек
void Neg();
//достает из стека два элемента, складывает их по модулю и кладет результат в стек
void Xor();
//достает из стека два элемента, делает побитовый сдвиг влево второго относительно первого и кладет результат в стек
void LeftShift();
//достает из стека два элемента, делает побитовый сдвиг вправо второго относительно первого и кладет результат в стек
void RightShift();
//достает из стека два элемента, сравнивает второй с первым их и кладет результат в стек
void More();
//достает из стека два элемента, сравнивает второй с первым и кладет результат в стек
void Less();
//достает из стека два элемента, сравнивает второй с первым и кладет результат в стек
void Equels();
//достает из стека элемент если он больше 0 выполняет следующую команду
void Cond();
//создает метку и возвращает ее
string Label();
//переходит к указанной метке
void Jump(string label);
void Generate(System.IO.StreamWriter outs);
}
}