ПО, ЭВМ и АСУ из Таможенного Союза

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

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


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » предложения работы » Написание комментариев для НЯ-компилятора


Написание комментариев для НЯ-компилятора

Сообщений 61 страница 70 из 70

61

> mark - метка или лучше заклалка используется в опережающем чтении.

Код:
PROCEDURE ВставьЗнакОшибкиВИсходник*(n: ТипКодОшибки; pos: ТипМестоВТексте); (* <Mark> *)
 BEGIN
  IF (n >= 0) & ~((oberon IN options) & (n >= 181) & (n <= 190)) THEN
   noerr := FALSE;
   IF pos < 0 THEN pos := 0 END;
   IF (pos < lastpos) OR (lastpos + 9 < pos) THEN
    lastpos := pos;
    IF errors < maxErrors THEN
     errNo[errors] := n; errPos[errors] := pos
    END;
    INC(errors)
   END;
   IF trap IN options THEN HALT(100) END;
  ELSIF (n <= -700) & (errors < maxErrors) THEN
   errNo[errors] := -n; errPos[errors] := pos; INC(errors)
  END
 END ВставьЗнакОшибкиВИсходник;

Вот исходник функции Mark. Не скажу, что я понимаю всё, но выглядит всё же как вставка маркера ошибки (ББ вставляет квадратики в текст в месте ошибки). Я поверю, что это упреждающее чтение, если вы покажете мне, где потом эти ошибки используются в парсере. У vis даже есть расшифровка в исходниках:

Код:
   vis*: BYTE;	(* internal, external, externalR, inPar, outPar *)

0

62

> Михаил уже говорил одно дело перевод другое рефакторинг. И в третьих что бы понять надо пропустить через себя. Каждый видит по своему у каждого свой уклад мыслий. Поэтому я ии не надеялся что вы поймёте.

Тут неизбежно происходит такой процесс при переименовании: читаем, понимаем, составляем полную фразу, которая для нас понятно описывает смысл, потом сокращаем эту фразу. Сократить mode до сорт - вам понятно, мне - нет. Выход состоит из двух частей.
1. Писать не одно слово, а всю фразу. Фраза всё равно будет составлена из понятных только вам понятий, но всё же будет проще её понять стороннему человеку.
2. Определять каждое понятие, расшифровывая его комментарием в хорошем месте. Например, если это тип, то у определения типа. Если это набор целых констант (перечисление), то там, где определены константы.

Исключение из этого правила - те слова, которые встречаются очень часто. Порог, думаю, где-то 300-400 вхождений на 2000 строк. Это, прежде всего, имена модулей, из которых мы что-то импортируем. Хотя я посмотрел, что НяМ встречается всего 100 раз в Парсер.kp. Но во всём компиляторе оно встречается уже 1500 раз (на 13000 строк), т.к. примерно в каждой 10-й строке. Думаю, всё же оправдано здесь сократить. Дальше, текущая лексема встречается 233 раза в Парсер.kp, но я её сократил. Может, и зря. Но само слово лексема встречается уже 364 раза, т.е. её уже имеет смысл сократить до Лксм.

0

63

budden написал(а):

Но само слово лексема встречается уже 364 раза, т.е. её уже имеет смысл сократить до Лксм.

Лексема - это просто целостная ходовая единица.
"текШт" или "шт"
На самом деле - тот же "кусок" с немецкого. Но в русском сокращение до "шт" общераспространено.
А ещё когда-то говорили просто "кус". (тогда там откусы и кусачки или кусака :D )

Отредактировано MihalNik (2018-11-07 13:29:48)

0

64

В тек. виде НЯ-компилятор около 18 тыс. строк (с комментами и пустыми), среди которых латиницы около 330 тыс. знаков без 16-ричных цифр. В т.ч. около 2-х тыс. разных названий идентификаторов и слов/буквосочетаний в литералах. С учетом  различающихся слов в комментариях - менее 3-х тыс. Комментарии - десятая массы. Четверть - зарезервированные слова. Половина латиницы - это около 90 идентификаторов:
1 THEN 3642
2 END 4060
3 typ 2417
4 PROCEDURE 788
5 IF 2788
6 obj 1603
7 ELSE 1100
8 ELSIF 859
9 BEGIN 763
10 INTEGER 518
11 conval 604
12 NIL 1159
13 form 751
14 mode 740
15 x 2844
16 intval 462
17 VAR 893
18 name 607
19 BaseTyp 321
20 link 517
21 left 514
22 right 407
23 GenByte 256
24 WHILE 354
25 FALSE 348
26 WriteString 158
27 class 337
28 String 278
29 Pointer 236
30 Object 275
31 sysflag 228
32 offset 265
33 Int 495
34 realval 208
35 n 1450
36 proc 345
37 err 458
38 BOOLEAN 195
39 Struct 218
40 IN 638
41 Node 294
42 global 194
43 sym 383
44 y 1135
45 setval 185
46 TRUE 272
47 RETURN 178
48 OR 523
49 options 139
50 SHORT 189
51 comp 235
52 untagged 110
53 ident 176
54 Nconst 141
55 size 210
56 INC 280
57 Item 207
58 ASSERT 136
59 interface 90
60 SHORTINT 101
61 subcl 161
62 DynArr 132
63 MakeConst 85
64 strobj 127
65 fld 252
66 attribute 84
67 btyp 179
68 DO 357
69 adr 237
70 stop 167
71 hint 167
72 ABSTRACT 83
73 num 212
74 TextModels 63
75 GenMove 90
76 par 207
77 undftyp 87
78 pos 200
79 type 148
80 String1 84
81 reg 195
82 Get 195
83 mnolev 97
84 tag 191
85 i 573
86 opts 142
87 impCtxt 81
88 Record 94
89 ARRAY 110
90 SHORTCHAR 61
3-им числом - частота употребления.

Отредактировано MihalNik (2018-12-28 12:30:38)

0

65

+ следующие 340 (1/4 массы) = 3/4 латиницы (на 430 словоформ):
91 absAttr 78
92 MakeReg 77
93 len 179
94 SymWInt 76
95 Char 133
96 Real 132
97 ext 175
98 TextMappers 47
99 errpos 84
100 vis 167
101 struct 82
102 SYSTEM 82
103 scale 97
104 last 120
105 f 471
106 dst 157
107 VarPar 77
108 stat 115
109 EXTENSIBLE 46
110 string 75
111 BYTE 112
112 base 111
113 realSet 63
114 DIV 147
115 ch 218
116 s 433
117 EnterProc 48
118 CheckSym 54
119 Char1 86
120 src 143
121 flag 105
122 ProcTyp 60
123 FPrint 70
124 first 83
125 node 103
126 Array 82
127 intSet 68
128 SetLabel 51
129 semicolon 44
130 Free 99
131 internal 49
132 OF 196
133 expr 95
134 NewConst 47
135 old 125
136 end 123
137 WriteChar 41
138 Reg 122
139 Const 73
140 c 361
141 val 120
142 con 120
143 TProc 72
144 OutReference 30
145 Con 120
146 GenPush 51
147 Files 71
148 str 118
149 res 117
150 empAttr 50
151 CASE 87
152 next 86
153 extensioninterface 19
154 w 340
155 p 336
156 out 111
157 id 165
158 DumpExp 47
159 NewLbl 54
160 INCL 81
161 GenJump 46
162 level 64
163 Undef 63
164 from 78
165 fprint 52
166 attr 77
167 MOD 101
168 int 100
169 comma 60
170 Int1 75
171 UseThisCall 27
172 xval 74
173 extAttr 42
174 SymRInt 42
175 r 292
176 Expression 29
177 mod 96
178 TextViews 32
179 pointer 41
180 wreg 71
181 StdLog 47
182 Kernel 47
183 local 56
184 absolute 35
185 SET 93
186 head 69
187 Comp 69
188 notyp 55
189 EMPTY 55
190 rec 91
191 library 39
192 NewLeaf 39
193 LIMITED 39
194 GenCExt 39
195 startpos 34
196 Name 68
197 number 45
198 z 267
199 scope 53
200 XProc 53
201 Insert 44
202 Dialog 44
203 error 52
204 OutName 37
205 new 86
206 GlbMod 43
207 userList 32
208 ref 85
209 procedure 28
210 limAttr 36
211 a 252
212 GetReg 41
213 charSet 35
214 Nproc 49
215 root 61
216 char 61
217 externalR 27
218 ORD 81
219 to 121
220 used 60
221 links 48
222 index 48
223 EXIT 60
224 mno 79
225 yval 59
226 Label 47
227 for 78
228 StringWSize 21
229 DEC 77
230 module 38
231 NEW 76
232 Indent 38
233 Check 45
234 real 56
235 pvfp 56
236 ftyp 56
237 NewNode 32
238 not 74
239 Out 74
240 AdjustStack 20
241 nofptrs 31
242 guidtyp 31
243 ap 108
244 LProc 43
245 Var 71
246 Identifier 21
247 NameNode 26
248 FindPtrs 26
249 structure 23
250 CheckSize 23
251 noerr 41
252 align 41
253 pre 68
254 else 51
255 NilTyp 34
256 Ndop 51
257 CHAR 51
258 Bool 51
259 Nvarpar 29
260 LogWStr 29
261 GenFMOp 29
262 Set 67
263 Ind 67
264 sequential 20
265 high 50
266 desc 50
267 Ntype 40
268 length 33
269 iidPar 33
270 Nderef 33
271 text 49
272 list 49
273 history 28
274 WriteLn 28
275 LOOP 49
276 Keyword 28
277 GenComp 28
278 AX 97
279 outPar 32
280 fp 96
281 SetPos 32
282 REPEAT 32
283 ObjW 48
284 minus 38
285 Close 38
286 procdec 27
287 SHORTREAL 21
288 POINTER 27
289 CHR 63
290 op 94
291 fwd 62
292 Nfield 31
293 NewObj 31
294 EnterTyp 23
295 set 61
296 Typ 61
297 ovflchk 26
298 in 91
299 ConstNotAlloc 14
300 sys 60
301 record 30
302 newPar 30
303 Views 36
304 IProc 36
305 CheckRecursiveType 10
306 t 177
307 file 44
308 ToString 22
309 rider 35
310 iunktyp 25
311 inPar 35
312 fctno 35
313 UNTIL 35
314 Nindex 29
315 m 173
316 plus 43
317 processor 19
318 LEN 57
319 title 34
320 DevMarkers 17
321 ContainsIPtrs 13
322 statseq 24
323 source 28
324 recTyp 28
325 oberon 28
326 newAttr 24
327 modeOfThisProc 12
328 forward 24
329 checksum 21
330 NewName 24
331 AnyTyp 28
332 qualident 18
333 condition 18
334 ENTIER 27
335 Nassign 23
336 short 32
337 parameters 16
338 fpar 40
339 external 20
340 VString1 20
341 CProc 32
342 CONST 32
343 exp 53
344 dir 53
345 pbfp 39
346 Size 39
347 Nguard 26
348 NewStr 26
349 ynode 31
350 nofel 31
351 b 155
352 hasBody 22
353 booltyp 22
354 receiver 19
355 headSize 19
356 function 19
357 Nmop 38
358 times 30
359 ODD 50
360 of 74
361 null 37
362 and 49
363 LogWNum 21
364 entry 29
365 readonly 18
366 opt 48
367 idx 48
368 UseCalls 18
369 Stk 48
370 ReadByte 18
371 NewRealConst 12
372 Init 36
373 apar 35
374 Model 28
375 H 140
376 GenCode 20
377 FPrintName 14
378 useFpu 23
379 numtyp 23
380 max 46
381 anytyp 23
382 ObjLen 23
383 GenDbl 23
384 Dev 46
385 portable 17
386 fileList 17
387 UseReals 17
388 SelfName 17
389 Load 34
390 InStruct 17
391 DumpStat 17
392 wsize 27
393 min 45
394 mem 45
395 loc 45
396 clientinterface 9
397 TextControllers 9
398 Ncomp 27
399 ConnectTo 15
400 Basic 27
401 CX 67
402 subList 19
403 setUsed 19
404 Nifelse 19
405 RECORD 22
406 REAL 33
407 PropagateRecordSysFlag 6
408 PropagateRecPtrSysFlag 6
409 PropagateArrPtrSysFlag 6
410 NewBoolConst 11
411 MODULE 22
412 IntDOp 22
413 StandProcCall 10
414 GenStringMove 10
415 GenLoadAdr 13
416 prog 32
417 nofhdfld 16
418 baseProc 16
419 StrDeref 16
420 ShowTree 16
421 Includes 16
422 FreeWReg 16
423 ConstExt 16
424 sysptrtyp 14
425 symbol 21
426 stk 42
427 release 18
428 import 21
429 if 63
430 bigEndian 14

Отредактировано MihalNik (2018-12-28 12:43:41)

0

66

Так, и к чему Вы клоните?

0

67

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

Так, и к чему Вы клоните?

К вопросам, почему мы работаем с низкой производительностью.
Когда дано 430 идентификаторов, заменой которых выпиливается 3/4 латиницы.

Отредактировано MihalNik (2018-12-28 16:22:25)

0

68

Вы предлагаете прямо взять и проделать контекстную замену?

0

69

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

Вы предлагаете прямо взять и проделать контекстную замену?

MihalNik предлагает провести подробный глубокий разбор задачи и упорядочить подходы к решениям.
Так просто все замены не выйдут. Даже если это потом скомпилируется и будет работать - это не совсем то, что м.б. нужно.
1) м.б. что-то сломается: м.б. литералы, есть границы внешнего взаимодействия.
2) м.б. внесена трудноуловимая ошибка, если захочется два слова перевести одинаково - это м.б. допустимо, а может и нет, может захочется разный перевод одного названия для разных, изначально одноименных сущностей. Нужно удобное (простое и быстрое) управление этим.
3) простой перевод не всегда допустим - местами обрывки слов и отдельные буквы. Нужен разбор идентификаторов и сокращений. Хотя бы вычленение слов/поиск по началам/выборкам согласных.
4) нужны сами средства перевода - подключение словарей, возможно гугла и т.п. И для перевода и для подбора синонимов. Чтобы работа шла быстро.
5) нужно средство разделения труда - Git работает с текстами, а требуется разделение/управление/слияние переводов, т.е. одного слоя текстов соотнесенного с другим переводом. Он не может показать одной строчкой, что мы хотим заменить "release" на "выпуск".
6) лучший уровень работы - поверх AST, а не текста - проще квалифицировать безопасные замены, чего редакторы не умеют.

Основная же боль в том. что работа не обозрима в хорошо измеримом направлении. Чтобы каждая облегчала последующие. А сейчас мы не пожинаем плоды замен. Добавление комментариев не удаляет латиницы. Замазка ключевых слов в VS неярким цветом - это замазка. А замена их - это уровень нескольких десяток строчек кода в одной процедуре лексера (и еще где-то слово MODULE проверялось). Но 1/4 массы латиницы. Грубо говоря, есть 160 страниц на латинице, а должно остаться 40 после 430 замен.
Конечно, это не говорит о всех трудностях: i, например, можно заменить на №, а другие ничего не говорящие однобуквенные идентификаторы вроде x,y,z,n,... - нет.
Хотя и многие из тех можно автоматом заменить на чуть более говорящие имена, хотя бы и о том же порядке входных переменных: вх, вх1, вх2, вх3, ... вых, вых1, вых2, ...вхВых, вх1_Вых, вх2_Вых, .... и т.п. Можно вкл. в такое имя название типа.

Постановка задачи поверхностного перевода

Отредактировано MihalNik (2018-12-28 21:56:42)

0

70

Я не понял в чем тут цель. Но гораздо проще работать с готовыми моделями. У меня есть чистый и незамутненный язык настоящий человеческий привязанный строго к контексту настолько, что нельзя выдумать произвольное слова. Все слова языка изначально определены.

Да это тот язык на котором разговаривал Вавилон или точнее те римские легионеры что остались под Каиром.

А вот потом уже можно без болей и терзаний перевести на русский, французский и любой другой искусственный язык созданный не более 200 лет назад банальными подстановками букв.

Как прямо на наших глазах за 30 лет создали суржик вкраинский путем коверканья русского и заимствования польского.

Самое главное преимущество того что я предлагаю в том что язык Вавилона автоматически будет базой всех языков всех народов, а не то что вы тут делаете взяв язык которому от силы 200 лет (русский) который представляет мешанину, турецкого, фарси, непали или санскрита, латинского  и еще бог знает чего и пытаетесь там найти смысл в словах. Его там просто нет смысла в знаках.

Есть и подвох. Нужно иметь сильный мозг чтоб с огромным количеством форм глаголов и существительных оперировать. Ну и уметь переключать свой контекст языковой.

Отредактировано ignat99 (2023-09-21 14:10:43)

0


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » предложения работы » Написание комментариев для НЯ-компилятора