@artel/ru-compiler 0.6.25207 → 0.6.25258

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (9) hide show
  1. package/package.json +3 -3
  2. package//320/230/321/201/321/205/320/276/320/264/320/275/320/270/320/272/320/270/./320/260/321/200/321/202/320/265/320/273/321/214//320/232/320/276/320/275/321/204/320/270/320/263/321/203/321/200/320/260/321/206/320/270/321/217.json +2 -2
  3. package//320/230/321/201/321/205/320/276/320/264/320/275/320/270/320/272/320/270//320/222/320/270/320/264/320/241/320/273/320/276/320/262/320/260./320/260/321/200/321/202 +7 -8
  4. package//320/230/321/201/321/205/320/276/320/264/320/275/320/270/320/272/320/270//320/222/320/270/320/264/320/243/320/267/320/273/320/260./320/260/321/200/321/202 +224 -0
  5. package//320/230/321/201/321/205/320/276/320/264/320/275/320/270/320/272/320/270//320/224/320/265/320/273/320/270/321/202/320/265/320/273/321/214./320/260/321/200/321/202 +112 -123
  6. package//320/230/321/201/321/205/320/276/320/264/320/275/320/270/320/272/320/270//320/224/320/270/320/260/320/273/320/265/320/272/321/202/320/237/320/260/320/272/320/265/321/202/320/260./320/260/321/200/321/202 +3 -3
  7. package//320/230/321/201/321/205/320/276/320/264/320/275/320/270/320/272/320/270//320/241/320/273/320/276/320/262/320/260/321/200/321/214/320/241/320/273/320/276/320/262./320/260/321/200/321/202 +168 -171
  8. package//320/230/321/201/321/205/320/276/320/264/320/275/320/270/320/272/320/270//320/242/320/265/320/272/321/201/321/202/320/235/320/265/321/215/320/272/321/200/320/260/320/275/320/270/321/200/320/276/320/262/320/260/320/275/320/275/321/213/320/271./320/260/321/200/321/202 +39 -8
  9. package//320/230/321/201/321/205/320/276/320/264/320/275/320/270/320/272/320/270//320/247/320/270/321/202/320/260/321/202/320/265/320/273/321/214/320/247/320/270/321/201/320/273/320/260./320/260/321/200/321/202 +12 -12
@@ -1,13 +1,6 @@
1
1
 
2
- тип Нотация = вариант
3
- {
4
- артель = 0
5
- опись = 1
6
- }
7
-
8
2
  тип НастройкиДелителя = объект
9
3
  {
10
- нотация: Нотация?
11
4
  пропускать-незначимое: ДаНет?
12
5
  позиция-начала: Целое?
13
6
  длина: Целое?
@@ -33,41 +26,83 @@
33
26
  {
34
27
  конст текст: Текст
35
28
  чтение лексема: Лексема { лексема`` }
36
- скрыто
37
- запись лексема { лексема`` = значение }
38
29
 
39
- скрыто нотация: Нотация
40
- скрыто пропускать-пробелы: ДаНет
41
- скрыто позиция-конца: Целое
42
- скрыто текущая-позиция: Целое
43
- скрыто баланс-фигурных-скобок: Целое
44
- скрыто стек-баланса-фигурных-скобок: Список<Целое>
45
- скрыто конст уникальные-тексты-лексем: Словарь<Текст, Текст>
30
+ скрытое
31
+ {
32
+ запись лексема { лексема`` = значение }
33
+
34
+ пропускать-пробелы: ДаНет
35
+ позиция-конца: Целое
36
+ текущая-позиция: Целое
37
+ баланс-фигурных-скобок: Целое
38
+ стек-баланса-фигурных-скобок: Список<Целое>
39
+ конст уникальные-тексты-лексем: Словарь<Текст, Текст>
40
+ }
46
41
 
47
42
  создание(текст`: Текст, настройки: НастройкиДелителя? = пусто)
48
43
  {
49
44
  текст = текст`
50
- нотация = настройки?.нотация ?? Нотация.артель
51
45
  пропускать-пробелы = настройки?.пропускать-незначимое ?? нет
52
46
  текущая-позиция = настройки?.позиция-начала ?? 0
53
47
  конст длина = настройки?.длина
54
- позиция-конца = текущая-позиция + длина! когда длина != пусто : текст.длина
48
+ позиция-конца = условно(длина != пусто, текущая-позиция + длина, текст.длина)
55
49
 
56
50
  баланс-фигурных-скобок = 0
57
51
  стек-баланса-фигурных-скобок = Список<Целое>()
58
52
  уникальные-тексты-лексем = Словарь<Текст, Текст>()
59
53
 
60
- лексема = следующая-лексема()
54
+ лексема`` = следующая-лексема()
61
55
  }
62
56
 
63
57
  функция предпросмотр(анализатор: функция(): ДаНет): ДаНет
64
58
  {
65
- результат = пробный-анализ-или-предпросмотр(анализатор, безусловно-восстановить-состояние = да)
59
+ конст сохран-лексема = лексема
60
+ конст сохран-текущая-позиция = текущая-позиция
61
+ конст сохран-баланс-фигурных-скобок = баланс-фигурных-скобок
62
+ пусть сохран-стек-баланса-фигурных-скобок: Список<Целое>? = пусто
63
+ если стек-баланса-фигурных-скобок.количество > 0
64
+ {
65
+ сохран-стек-баланса-фигурных-скобок = Список<Целое>(стек-баланса-фигурных-скобок)
66
+ }
67
+ результат = анализатор()
68
+ лексема = сохран-лексема
69
+ текущая-позиция = сохран-текущая-позиция
70
+ баланс-фигурных-скобок = сохран-баланс-фигурных-скобок
71
+ если сохран-стек-баланса-фигурных-скобок != пусто
72
+ {
73
+ стек-баланса-фигурных-скобок = сохран-стек-баланса-фигурных-скобок
74
+ }
75
+ иначе
76
+ {
77
+ стек-баланса-фигурных-скобок.очистить()
78
+ }
66
79
  }
67
80
 
68
- функция пробный-анализ(анализатор: функция(): ДаНет): ДаНет
81
+ функция пробный-анализ<Т>(анализатор: функция(): Т?): Т?
69
82
  {
70
- результат = пробный-анализ-или-предпросмотр(анализатор, безусловно-восстановить-состояние = нет)
83
+ конст сохран-лексема = лексема
84
+ конст сохран-текущая-позиция = текущая-позиция
85
+ конст сохран-баланс-фигурных-скобок = баланс-фигурных-скобок
86
+ пусть сохран-стек-баланса-фигурных-скобок: Список<Целое>? = пусто
87
+ если стек-баланса-фигурных-скобок.количество > 0
88
+ {
89
+ сохран-стек-баланса-фигурных-скобок = Список<Целое>(стек-баланса-фигурных-скобок)
90
+ }
91
+ результат = анализатор()
92
+ если результат == пусто
93
+ {
94
+ лексема = сохран-лексема
95
+ текущая-позиция = сохран-текущая-позиция
96
+ баланс-фигурных-скобок = сохран-баланс-фигурных-скобок
97
+ если сохран-стек-баланса-фигурных-скобок != пусто
98
+ {
99
+ стек-баланса-фигурных-скобок = сохран-стек-баланса-фигурных-скобок
100
+ }
101
+ иначе
102
+ {
103
+ стек-баланса-фигурных-скобок.очистить()
104
+ }
105
+ }
71
106
  }
72
107
 
73
108
  функция следующая-лексема(): Лексема
@@ -239,17 +274,8 @@
239
274
  }
240
275
  либо "`"
241
276
  {
242
- если нотация == Нотация.опись
243
- {
244
- текущая-позиция += 1
245
- прочитать-однострочный-комментарий()
246
- вид-лексемы = ВидЛексемы.комментарий-однострочный
247
- }
248
- иначе
249
- {
250
- текущая-позиция += 1
251
- вид-лексемы = ВидЛексемы.знак-обратная-кавычка
252
- }
277
+ текущая-позиция += 1
278
+ вид-лексемы = ВидЛексемы.знак-обратная-кавычка
253
279
  }
254
280
  либо "/"
255
281
  {
@@ -267,17 +293,9 @@
267
293
  иначе если текст.символ-по-позиции(текущая-позиция + 1) == "*"
268
294
  {
269
295
  текущая-позиция += 2
270
- пока текущая-позиция < позиция-конца
271
- {
272
- конст символ = текст.символ-по-позиции(текущая-позиция)
273
- если символ == "*" и текст.символ-по-позиции(текущая-позиция + 1) == "/"
274
- {
275
- текущая-позиция += 2
276
- прервать цикл
277
- }
278
- текущая-позиция += 1
279
- }
296
+ пусть р = прочитать-многострочный-комментарий()
280
297
  вид-лексемы = ВидЛексемы.комментарий-многострочный
298
+ незавершённая = не р
281
299
  }
282
300
  иначе
283
301
  {
@@ -438,12 +456,7 @@
438
456
  {
439
457
  пусть р = прочитать-имя-в-кавычках()
440
458
  вид-лексемы = ВидЛексемы.имя-в-кавычках
441
- незавершённая = не(р)
442
- }
443
- иначе если это-начало-имени(текст.символ-по-позиции(текущая-позиция + 1))
444
- {
445
- прочитать-имя()
446
- вид-лексемы = ВидЛексемы.имя
459
+ незавершённая = не р
447
460
  }
448
461
  иначе
449
462
  {
@@ -488,7 +501,7 @@
488
501
  {
489
502
  пусть р = прочитать-имя-в-кавычках()
490
503
  вид-лексемы = ВидЛексемы.имя-в-кавычках
491
- незавершённая = не(р)
504
+ незавершённая = не р
492
505
  }
493
506
  либо *
494
507
  {
@@ -512,44 +525,15 @@
512
525
  }
513
526
  иначе
514
527
  {
515
- текст-лексемы = существующий!
528
+ текст-лексемы = существующий
516
529
  }
517
530
  }
518
531
  лексема = Лексема(вид-лексемы, текст-лексемы, позиция-начала, незавершённая)
519
532
  результат = лексема
520
533
  }
521
534
 
522
- скрытая функция пробный-анализ-или-предпросмотр(анализатор: функция(): ДаНет,
523
- безусловно-восстановить-состояние: ДаНет): ДаНет
535
+ скрытая функция фигурная-скобка-оканчивает-шаблон-текста(): ДаНет
524
536
  {
525
- конст сохран-лексема = лексема
526
- конст сохран-текущая-позиция = текущая-позиция
527
- конст сохран-баланс-фигурных-скобок = баланс-фигурных-скобок
528
- пусть сохран-стек-баланса-фигурных-скобок: Список<Целое>? = пусто
529
- если стек-баланса-фигурных-скобок.количество > 0
530
- {
531
- сохран-стек-баланса-фигурных-скобок = Список<Целое>(стек-баланса-фигурных-скобок)
532
- }
533
-
534
- результат = анализатор()
535
-
536
- если безусловно-восстановить-состояние или результат == нет
537
- {
538
- лексема = сохран-лексема
539
- текущая-позиция = сохран-текущая-позиция
540
- баланс-фигурных-скобок = сохран-баланс-фигурных-скобок
541
- если сохран-стек-баланса-фигурных-скобок != пусто
542
- {
543
- стек-баланса-фигурных-скобок = сохран-стек-баланса-фигурных-скобок!
544
- }
545
- иначе
546
- {
547
- стек-баланса-фигурных-скобок.очистить()
548
- }
549
- }
550
- }
551
-
552
- скрытая функция фигурная-скобка-оканчивает-шаблон-текста(): ДаНет {
553
537
  результат = стек-баланса-фигурных-скобок.количество > 0 и баланс-фигурных-скобок == 1
554
538
  }
555
539
 
@@ -571,9 +555,9 @@
571
555
  текущая-позиция += 1
572
556
  если кавычка == "\""
573
557
  {
574
- вид-лексемы =
575
- ВидЛексемы.буквально-текст-локализуемый когда локализуемый :
576
- ВидЛексемы.буквально-текст
558
+ вид-лексемы = условно(локализуемый,
559
+ ВидЛексемы.буквально-текст-локализуемый,
560
+ ВидЛексемы.буквально-текст)
577
561
  }
578
562
  иначе
579
563
  {
@@ -587,9 +571,9 @@
587
571
  текущая-позиция += 1
588
572
  если кавычка == "\""
589
573
  {
590
- вид-лексемы =
591
- ВидЛексемы.буквально-начало-шаблона-текста-локализуемого когда локализуемый :
592
- ВидЛексемы.буквально-начало-шаблона-текста
574
+ вид-лексемы = условно(локализуемый,
575
+ ВидЛексемы.буквально-начало-шаблона-текста-локализуемого,
576
+ ВидЛексемы.буквально-начало-шаблона-текста)
593
577
  }
594
578
  иначе
595
579
  {
@@ -604,13 +588,14 @@
604
588
  если текущая-позиция >= позиция-конца
605
589
  {
606
590
  конец = текущая-позиция
607
- вид-лексемы = ВидЛексемы.буквально-текст когда кавычка == "\"" :
608
- ВидЛексемы.буквально-окончание-шаблона-текста
591
+ вид-лексемы = условно(кавычка == "\"",
592
+ ВидЛексемы.буквально-текст,
593
+ ВидЛексемы.буквально-окончание-шаблона-текста)
609
594
  если кавычка == "\""
610
595
  {
611
- вид-лексемы =
612
- ВидЛексемы.буквально-текст-локализуемый когда локализуемый :
613
- ВидЛексемы.буквально-текст
596
+ вид-лексемы = условно(локализуемый,
597
+ ВидЛексемы.буквально-текст-локализуемый,
598
+ ВидЛексемы.буквально-текст)
614
599
  }
615
600
  иначе
616
601
  {
@@ -668,12 +653,11 @@
668
653
  если результат
669
654
  {
670
655
  конст является-16р-цифрой: функция(символ: Символ): ДаНет =
671
- это-16р-цифра-латиницы когда с1 == "u" :
672
- это-16р-цифра-кириллицы // когда с1 == "ю"
656
+ условно(с1 == "u", это-16ричная-цифра-латиницы, это-16ричная-цифра-кириллицы)
673
657
  пусть н = начало + 2
674
658
  пока н < конец
675
659
  {
676
- если не(является-16р-цифрой(текст[н]))
660
+ если не является-16р-цифрой(текст[н])
677
661
  {
678
662
  результат = нет
679
663
  прервать цикл
@@ -705,17 +689,17 @@
705
689
  если первая-цифра-0 и следующий-символ == "x"
706
690
  {
707
691
  текущая-позиция += 2
708
- прочитать-16р-цифры-латиницы()
692
+ прочитать-16ричные-цифры-латиницы()
709
693
  }
710
694
  иначе если первая-цифра-0 и следующий-символ == "ш"
711
695
  {
712
696
  текущая-позиция += 2
713
- прочитать-16р-цифры-кириллицы()
697
+ прочитать-16ричные-цифры-кириллицы()
714
698
  }
715
699
  иначе если первая-цифра-0 и (следующий-символ == "b" или следующий-символ == "д")
716
700
  {
717
701
  текущая-позиция += 2
718
- прочитать-2р-цифры()
702
+ прочитать-2ичные-цифры()
719
703
  }
720
704
  иначе
721
705
  {
@@ -735,7 +719,7 @@
735
719
  {
736
720
  текущая-позиция += 1
737
721
  }
738
- если не(прочитать-цифры())
722
+ если не прочитать-цифры()
739
723
  {
740
724
  // Ошибка: ожидается цифра
741
725
  незавершённая = да
@@ -764,9 +748,9 @@
764
748
  }
765
749
  }
766
750
 
767
- скрытая функция прочитать-16р-цифры-латиницы(): ДаНет
751
+ скрытая функция прочитать-16ричные-цифры-латиницы(): ДаНет
768
752
  {
769
- результат = это-16р-цифра-латиницы(текст.символ-по-позиции(текущая-позиция))
753
+ результат = это-16ричная-цифра-латиницы(текст.символ-по-позиции(текущая-позиция))
770
754
  если результат
771
755
  {
772
756
  цикл
@@ -774,13 +758,13 @@
774
758
  текущая-позиция += 1
775
759
  }
776
760
  повтор пока текущая-позиция < позиция-конца и
777
- это-16р-цифра-латиницы(текст.символ-по-позиции(текущая-позиция))
761
+ это-16ричная-цифра-латиницы(текст.символ-по-позиции(текущая-позиция))
778
762
  }
779
763
  }
780
764
 
781
- скрытая функция прочитать-16р-цифры-кириллицы(): ДаНет
765
+ скрытая функция прочитать-16ричные-цифры-кириллицы(): ДаНет
782
766
  {
783
- результат = это-16р-цифра-кириллицы(текст.символ-по-позиции(текущая-позиция))
767
+ результат = это-16ричная-цифра-кириллицы(текст.символ-по-позиции(текущая-позиция))
784
768
  если результат
785
769
  {
786
770
  цикл
@@ -788,13 +772,13 @@
788
772
  текущая-позиция += 1
789
773
  }
790
774
  повтор пока текущая-позиция < позиция-конца и
791
- это-16р-цифра-кириллицы(текст.символ-по-позиции(текущая-позиция))
775
+ это-16ричная-цифра-кириллицы(текст.символ-по-позиции(текущая-позиция))
792
776
  }
793
777
  }
794
778
 
795
- скрытая функция прочитать-2р-цифры(): ДаНет
779
+ скрытая функция прочитать-2ичные-цифры(): ДаНет
796
780
  {
797
- результат = это-2р-цифра(текст.символ-по-позиции(текущая-позиция))
781
+ результат = это-2ичная-цифра(текст.символ-по-позиции(текущая-позиция))
798
782
  если результат
799
783
  {
800
784
  цикл
@@ -802,7 +786,7 @@
802
786
  текущая-позиция += 1
803
787
  }
804
788
  повтор пока текущая-позиция < позиция-конца и
805
- это-2р-цифра(текст.символ-по-позиции(текущая-позиция))
789
+ это-2ичная-цифра(текст.символ-по-позиции(текущая-позиция))
806
790
  }
807
791
  }
808
792
 
@@ -823,19 +807,29 @@
823
807
  скрытая функция прочитать-однострочный-комментарий()
824
808
  {
825
809
  пока текущая-позиция < позиция-конца и
826
- не(это-разделитель-строк(текст.символ-по-позиции(текущая-позиция)))
810
+ не это-разделитель-строк(текст.символ-по-позиции(текущая-позиция))
827
811
  {
828
812
  текущая-позиция += 1
829
813
  }
830
814
  }
831
815
 
832
- скрытая функция прочитать-имя()
816
+ скрытая функция прочитать-многострочный-комментарий(): ДаНет
833
817
  {
834
- если текст.символ-по-позиции(текущая-позиция) == "~"
818
+ пока текущая-позиция < позиция-конца
835
819
  {
820
+ конст символ = текст.символ-по-позиции(текущая-позиция)
821
+ если символ == "*" и текст.символ-по-позиции(текущая-позиция + 1) == "/"
822
+ {
823
+ текущая-позиция += 2
824
+ вернуть да
825
+ }
836
826
  текущая-позиция += 1
837
827
  }
828
+ вернуть нет
829
+ }
838
830
 
831
+ скрытая функция прочитать-имя()
832
+ {
839
833
  пусть позиция-минуса = текущая-позиция
840
834
  пока текущая-позиция < позиция-конца и
841
835
  это-часть-имени(текст.символ-по-позиции(текущая-позиция))
@@ -848,7 +842,7 @@
848
842
  {
849
843
  текущая-позиция += 1
850
844
  }
851
- если не(это-часть-имени(текст.символ-по-позиции(текущая-позиция)))
845
+ если не это-часть-имени(текст.символ-по-позиции(текущая-позиция))
852
846
  {
853
847
  текущая-позиция = позиция-минуса
854
848
  прервать цикл
@@ -865,11 +859,6 @@
865
859
 
866
860
  скрытая функция прочитать-имя-в-кавычках(): ДаНет
867
861
  {
868
- если текст.символ-по-позиции(текущая-позиция) == "~"
869
- {
870
- текущая-позиция += 1
871
- }
872
-
873
862
  текущая-позиция += 1
874
863
  пока текущая-позиция < позиция-конца
875
864
  {
@@ -924,21 +913,21 @@
924
913
  результат = символ >= "0" и символ <= "9"
925
914
  }
926
915
 
927
- всеобщая функция это-16р-цифра-латиницы(символ: Символ): ДаНет
916
+ всеобщая функция это-16ричная-цифра-латиницы(символ: Символ): ДаНет
928
917
  {
929
918
  результат = символ >= "0" и символ <= "9" или
930
919
  символ >= "A" и символ <= "F" или
931
920
  символ >= "a" и символ <= "f"
932
921
  }
933
922
 
934
- всеобщая функция это-16р-цифра-кириллицы(символ: Символ): ДаНет
923
+ всеобщая функция это-16ричная-цифра-кириллицы(символ: Символ): ДаНет
935
924
  {
936
925
  результат = символ >= "0" и символ <= "9" или
937
926
  символ >= "А" и символ <= "Е" или
938
927
  символ >= "а" и символ <= "е"
939
928
  }
940
929
 
941
- всеобщая функция это-2р-цифра(символ: Символ): ДаНет
930
+ всеобщая функция это-2ичная-цифра(символ: Символ): ДаНет
942
931
  {
943
932
  результат = символ == "0" или символ == "1"
944
933
  }
@@ -967,20 +956,20 @@
967
956
  {
968
957
  пусть индекс = 0
969
958
  конст длина = текст-без-кавычек.длина
970
- если индекс >= длина или это-начало-имени(текст.символ-по-позиции(индекс))
959
+ если индекс >= длина или это-начало-имени(текст-без-кавычек.символ-по-позиции(индекс))
971
960
  {
972
961
  вернуть нет
973
962
  }
974
963
  индекс += 1
975
964
  пока индекс < длина
976
965
  {
977
- если не (это-часть-имени(текст.символ-по-позиции(индекс)))
966
+ если не (это-часть-имени(текст-без-кавычек.символ-по-позиции(индекс)))
978
967
  {
979
968
  вернуть нет
980
969
  }
981
970
  индекс += 1
982
971
  }
983
- если индекс == длина и текст.символ-по-позиции(индекс) == "-"
972
+ если индекс == длина и текст-без-кавычек.символ-по-позиции(индекс) == "-"
984
973
  {
985
974
  вернуть нет
986
975
  }
@@ -1,7 +1,7 @@
1
1
 
2
2
  тип ДиалектПакета = вариант
3
3
  {
4
- смешанный = 0
5
- привычный = 1
6
- особый = 2
4
+ Артель-АМ = 0
5
+ Артель-А = 1
6
+ Артель-М = 2
7
7
  }