-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathc_fragments.py
116 lines (87 loc) · 3.5 KB
/
c_fragments.py
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
class CPrelude:
def __init__(self):
self.content = """
#include <stdlib.h>
#include <stdio.h>
void print_number(int number) {
printf("%d\\n", number);
}
void print_string(char* string) {
printf("%s\\n", string);
}
char at_index(char* string, int position) {
return string[position];
}
void write_index(char* string, int position, char value) {
string[position] = value;
}
"""
def build(self):
return self.content
class CStatementsFragment:
def __init__(self):
self.content = """
{statements}
"""
def add_statement(self, statement):
self.content = self.content.replace("{statements}", statement + "\n{statements}")
def build(self):
return self.content.replace("{statements}", "")
class CIfStatementFragment:
def __init__(self):
self.content = """if ({condition}) {
{true_statements}
} else {
{false_statements}
}
"""
def set_condition(self, condition):
self.content = self.content.replace("{condition}", condition)
def add_true_statement(self, statement):
self.content = self.content.replace("{true_statements}", statement + "\n{true_statements}")
def add_false_statement(self, statement):
self.content = self.content.replace("{false_statements}", statement + "\n{false_statements}")
def build(self):
return self.content.replace("{true_statements}", "").replace("{false_statements}", "")
class CWhileStatementFragment():
def __init__(self):
self.content = """while (1) {
{statements}
}
"""
def add_statement(self, statement):
self.content = self.content.replace("{statements}", statement + "\n{statements}")
def build(self):
return self.content.replace("{statements}", "")
class CFunctionFragment:
def __init__(self):
self.content = """
{return_type} {function_name}({parameters}) {
{statements}
}
"""
def set_return_type(self, return_type):
self.content = self.content.replace("{return_type}", return_type)
def set_function_name(self, function_name):
self.content = self.content.replace("{function_name}", function_name)
def add_parameter(self, parameter):
parameters_pos = self.content.find("{parameters}")
if self.content[parameters_pos - 1] != "(":
self.content = self.content.replace("{parameters}", ", {parameters}")
self.content = self.content.replace("{parameters}", parameter + "{parameters}")
def add_statement(self, statement):
self.content = self.content.replace("{statements}", statement + "\n{statements}")
def build(self):
return self.content.replace("{statements}", "").replace("{parameters}", "")
class CExpressionFragment:
def __init__(self, operator=None, content=""):
self.operator = operator
self.content = content
def add_expression(self, expression):
if self.content != "" and self.operator is not None:
self.content += f" {self.operator} "
self.content += expression
def build(self, paranthesis=True):
if self.operator is None:
paranthesis = False
return (paranthesis and "(" or "") + self.content + (paranthesis and ")" or "")