Ремесло программиста

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Компилятор POP

Сообщений 1 страница 6 из 6

1

Поздравляю всех с новым годом. Желаю счастья и успехов в новом году. А это подарочек.

Выкладываю свой транслятор. На входе язык близкий к паскалю на выходе код на ассемблере диалект TASM.
https://gitlab.com/pavia00/pop

Исходники собираются в Delphi 7. В других версиях не пробовал.
Напоминаю что POP использует только односложные выражения.

Для сборки exe можно воспользоваться
\Tests\tmp\make_.bat
Вызывает тасм и линкер для сборки exe файла.  Линкер из TASM 5.1 .

2

О, спасибо! Было бы ещё хорошо лицензию приложить, а то скачивать себе нельзя - незаконное копирование. Только издалека любоваться по правам, которые ты дал gitlab-у.

Отредактировано ВежливыйЛис (2018-12-31 20:52:54)

3

С Наступающим!
Итак: 30 pas-файлов, в которых около 15 тыс. строк, 2200 латинобуквосочетаний (3/4 массы - около 400).
В т.ч. однобуквенные: i, s. Зашифрованные названия переменных нам, скорее всего, не грозят. Комментарии по-русски иногда прослеживаются. Основная лексика кода:
1 procedure 911
2 begin 1515
3 end 1843
4 VarAssignAST 344
5 function 468
6 const 706
7 TNodeAST 434
8 Signature 385
9 then 782
10 Result 517
11 FFile 614
12 WriteLn 434
13 TPrinterAST 233
14 Indent 403
15 Integer 335
16 Node 511
17 ASTFabric 202
18 Expression 180
19 Create 299
20 IndentDeclRef 137
21 TVarDeclAST 161
22 _Type 332
23 Compiler 200
24 var 529
25 if 777
26 Designator 149
27 FuncCallAST 135
28 TTypeAST 182
29 TVarAssignAST 110
30 PrintCmdAssign 101
31 Length 231
32 TCompaundStatementAST 64
33 TStatementAST 97
34 CompaundStatementAST 62
35 TSimvol 176
36 Simvol 199
37 TIndentAST 118
38 DeclarationAST 83
39 SimvolsEQ 123
40 Write 216
41 result 178
42 Kind 264
43 Assert 176
44 VarDeclAST 105
45 IndentDecl 105
46 TypeFamily 104
47 String 173
48 FormalParametrs 68
49 else 250
50 RegName 142
51 ImmConst 120
52 FactorAST 105
53 NeedSimvol 93
54 TDeclarationAST 61
55 nil 295
56 IndentAST 97
57 FuncImpAST 87
58 Value 172
59 TS 417
60 TSignatureAST 62
61 CompaundStatement 46
62 constructor 71
63 Factor1 111
64 PrintIndent 70
65 Parent 127
66 TConstDeclAST 58
67 WideString 75
68 TTypeSimpleAST 53
69 CurrentSimvol 57
70 StatementAST 61
71 TFactorAST 73
72 TSemanter 81
73 FuncDeclAST 63
74 case 172
75 as 340
76 Boolean 97
77 TLabelingStatementAST 32
78 TFuncDeclAST 56
79 Add 216
80 LabelingStatement 38
81 TheCompiler 58
82 declarations 52
83 TImmConstAST 52
84 TDesignatorAST 44
85 TImplimentaionAST 36
86 TFormalParametrsAST 32
87 OperatorAST 54
88 ConstDeclAST 49
89 ExpressionAST 44
90 GetTypeSize 50
91 FSemanticCheking 34
92 class 107
93 GetRegName 53
94 TTypeFamily 48
95 TFuncCallAST 44
96 FormalParametrsAST 29
97 TExpressionAST 37
98 TSimvlerChar 43
99 Factor 85
100 TCompiler 56
101 Parametrs 56
102 dkDesignatureDot 31
103 TGramAnaliser 38
104 ActivLeaf 54
105 TFuncImpAST 44
106 ToReg 96
107 TTypeDeclAST 40
108 Error 96
109 SimpleStatementAST 26
110 ImplimentaionAST 29
111 ListStatemt 42
112 TSimpleStatementAST 24
113 TLabelDeclAST 35
114 TDeclSectionParser 25
115 NodeCreate 45
116 VarDecl 64
117 TOperatorAST 37
118 ParametrAST 40
119 ListFunc 55
120 PrintExpression 29
121 NewStatement 36
122 TFieldDeclAST 33
123 property 53
124 of 210
125 implementation 30
126 Destroy 60
127 TExpressionParser 24
128 TIndentDeclAST 29
129 interface 45
130 TStatementParser 25
131 ReadSimvol 40
132 protected 44
133 TParametrAST 33
134 TConstAST 44
135 PointerSize 36
136 Format 66
137 TSimvler 49
138 Table 77
139 IfExpression 32
140 HostStatementAST 24
141 and 126
142 BaseStatement 29
143 NewVarAssignAST 25
144 TSemanticCheking 23
145 Slovar 61
146 private 52
147 TypeAST 52
148 TCompilerWoker 26
149 published 40
150 lRelTrue 45
151 Righte 60
152 Items 72
153 FieldDeclAST 30
154 CallParametrAST 24
155 Reg1 89
156 public 59
157 Self 88
158 tfOrdinal 39
159 i 347
160 Flag 86
161 RefFunc 49
162 SetLength 38
163 MOV 114
164 tfStructure 31
165 ImmConstAST 31
166 for 113
167 LabelStatemnt 26
168 TTypeRecordAST 24
169 TForeignAsmAST 24
170 ExpressionList 24
171 Class 67
172 PrintPush 37
173 AddIndent 37
174 WideChar 41
175 do 163
176 Statement 36
177 THostStatementAST 19
178 override 40
179 array 64
180 TUnitAST 40
181 Prog 80
182 LexAnaliser 29
183 ListVar 45
184 False 63
185 Count 63
186 tfString 39
187 ErrorTypeCast 24
188 NewFuncCallAST 22
189 LevalUp 44
190 CurrentChar 28
191 Arg1 77
192 TCallParametrsAST 18
193 IsIndentDeclString 17
194 SubStack 38
195 SignatureTypeFamily 16
196 destructor 30
197 TASTFabric 30
198 Anchor 50
199 TypeDeclAST 27
200 CheckSimvol 27
201 Woker 59
202 TSimvlerString 21
203 Reg 98
204 EAX 98
205 GetUniWord 29
206 GetIndentRef 24
207 dkSignature 26
208 is 141
209 LabelingStatementAST 14
210 FuncDecl 35
211 ForStmAST 31
212 IndentsList 25
213 TypeRecordAST 21
214 TImplemtSectionParser 13
215 SubDesignator 21
216 Simvler 39
217 uint 68
218 LocalDec 34
219 Goal 68
220 FactorTypeFamily 17
221 tfUndefine 27
222 tfPointer 30
223 TSimvolAST 27
224 NodeAST 38
225 FSimvol 38
226 RepeatStmAST 22
227 PrintCompaundStatement 12
228 Op 132
229 GramAnaliser 22
230 ListConst 29
231 Pavia 52
232 List 65
233 IndentKind 26
234 FactorType 26
235 rEAX 63
236 kind 63
237 isType 42
238 True 63
239 TCompilerError 18
240 TCodePrinter 21
241 PrintStatement 18
242 FunctionHeadin 18
243 ASTType 36
244 Reserved 31
245 dkDesignature 19
246 TypeSimpleAST 19
247 DesignatorAST 19
248 Nil 82
249 VarAssign 27
250 WhileStmAST 22
251 TFileSimvler 20
252 TCaseEdgeAST 20
253 TCallParametrAST 15
254 NeedIndent 24
255 IsType 40
256 TExpressionListAST 13
257 Char 58
258 fkSignature 21
259 NIndent 33
260 CaseEdgeAST 21
261 ikFunction 23
262 CaseStmAST 23
263 Simple 38
264 inherited 25
265 TStackAST 25
266 tkSimple 28
267 ReadChar 28
268 Left 56
269 SignatureType 17
270 TScanerChar 20
271 TScanerByte 20
272 to 109
273 sIndent 31
274 dkDeSignatureArray 12
275 PathFuncCall 18
276 FCurrentChar 18
277 s 214
278 NSignature 21
279 ForeignAsm 21
280 IndentResult 17
281 DeclSectionParser 12
282 PrintVarAssignVar_Ordinal 8
283 ListType 25
284 FuncCall 25
285 PrintRegAssignNumber_Ordinal 7
286 DesignatorType 14
287 TFactorParser 15
288 OldVarAssignAST 13
289 Arg 65
290 TParserProcedure 12
291 Ofs 64
292 LabelDeclAST 16
293 IfStmAST 24
294 NStatement 19
295 TimeElaps 21
296 ListLabel 21
297 read 47
298 PrintVarAssignReg 11
299 PrintFactor 17
300 IntToStr 23
301 ErrorWay 23
302 getVarDeclKind 13
303 _Record 26
304 UGramAnaliser 14
305 ASmType 26
306 tfBoolean 20
307 TWhileStmAST 15
308 PathAssignToFuncCall 9
309 IndentRef 20
310 DesignatorTypeFamily 9
311 CommandCount 15
312 ESI 59
313 TypeFamily1 16
314 TCaseStmAST 16
315 PrintLabelingStatement 8
316 ParseCompaundStatement 8
317 ConstAST 22
318 Text 43
319 PrintCmdAssignFPU 10
320 AssignFile 17
321 TRepeatStmAST 13
322 BoolExpr 21
323 TTypeParser 15
324 TIntegerAST 15
325 TIndentKind 15
326 SimpleStatement 11
327 Word 41
328 Pointer 23
329 PIndent 23
330 uint1 32
331 fkImmConst 16
332 _Integer 20
333 USimvler 20
334 TImageOptionalHeader 8
335 ResultExpression 10
336 Parse 32
337 GetCount 20
338 CallParametrsAST 10
339 TTypeArrayAST 12
340 Size 39
341 SignatureAST 13
342 Rights 26
343 KeyWordsList 13
344 AStatementAST 12
345 Indents 22
346 FCurrentSimvol 11
347 dkDeSignatureFunc 9
348 GenLabelStatement 9
349 ExpressionListAST 9
350 ksLabelingStatement 8
351 tkUndefine 15
352 not 50
353 isTypeFast 15
354 UASTFabric 15
355 TForStmAST 15
356 ParseExpression 10
357 ParseDesignator 10
358 Fields 25
359 DWord 30
360 PrintVarAssign_OrdinalOrdinal 5
361 SingleTon 16
362 RightType 16
363 RefLabel 18
364 MainBlock 16
365 FNextChar 16
366 PExpression 13
367 MakeNewCall 13
368 Declaration 13
369 while 28
370 value 28

4

Эхх, такие подарочки не от хорошей жизни делаются, знаю по себе. Сделайте ПРОЧТИМЯ, чтобы люди понимали, в чём особенность Вашего проекта, чем отличается от других и где его можно применить (или для чего его нужно «допиливать»).

5

БудДен написал(а):

Сделайте

Невежливо. "Кому надо, тот и делает".

6

Вот так, мелкими шагами, всё что нужно будет сделано.