@artel/ru-artel-compiler 0.6.25208
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.
- package/package.json +13 -0
- 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 +7 -0
- 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/233/320/265/320/272/321/201/320/265/320/274/321/213./320/260/321/200/321/202 +75 -0
- 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 +64 -0
- 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
- 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 +995 -0
- 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 +7 -0
- 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 +398 -0
- 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 +223 -0
- 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 +111 -0
- package//320/230/321/201/321/205/320/276/320/264/320/275/320/270/320/272/320/270//320/257/320/267/321/213/320/272/320/237/320/260/320/272/320/265/321/202/320/260./320/260/321/200/321/202 +46 -0
@@ -0,0 +1,223 @@
|
|
1
|
+
|
2
|
+
функция без-кавычек(текст: Текст): Текст
|
3
|
+
{
|
4
|
+
результат = текст.скопировать(1, текст.длина - 2)
|
5
|
+
}
|
6
|
+
|
7
|
+
функция в-неэкранированный-текст(текст: Текст, нормализовать-переносы-строк: ДаНет): Текст
|
8
|
+
{
|
9
|
+
результат = ""
|
10
|
+
пусть конец = текст.длина
|
11
|
+
пусть позиция = пропустить-пустую-строку(текст, 0, конец)
|
12
|
+
пусть отступ: Текст? = пусто
|
13
|
+
если позиция > 0
|
14
|
+
{
|
15
|
+
отступ = получить-отступ-в-тексте(текст)
|
16
|
+
если отступ != пусто
|
17
|
+
{
|
18
|
+
конец = исключить-разделитель-строк-в-конце(текст, конец - отступ.длина)
|
19
|
+
позиция = пропустить-отступ(текст, позиция, отступ!)
|
20
|
+
}
|
21
|
+
}
|
22
|
+
пока позиция < конец
|
23
|
+
{
|
24
|
+
выбор текст[позиция]
|
25
|
+
либо "\<"
|
26
|
+
{
|
27
|
+
позиция += 1
|
28
|
+
если текст.символ-по-позиции(позиция) == "\/"
|
29
|
+
{
|
30
|
+
позиция += 1
|
31
|
+
если нормализовать-переносы-строк
|
32
|
+
{
|
33
|
+
результат += "\/"
|
34
|
+
}
|
35
|
+
иначе
|
36
|
+
{
|
37
|
+
результат += "\<\/"
|
38
|
+
}
|
39
|
+
если отступ != пусто
|
40
|
+
{
|
41
|
+
позиция = пропустить-отступ(текст, позиция, отступ!)
|
42
|
+
}
|
43
|
+
}
|
44
|
+
}
|
45
|
+
либо "\/"
|
46
|
+
{
|
47
|
+
позиция += 1
|
48
|
+
результат += "\/"
|
49
|
+
если отступ != пусто
|
50
|
+
{
|
51
|
+
позиция = пропустить-отступ(текст, позиция, отступ!)
|
52
|
+
}
|
53
|
+
}
|
54
|
+
либо "\\"
|
55
|
+
{
|
56
|
+
позиция += 1
|
57
|
+
если позиция < конец
|
58
|
+
{
|
59
|
+
конст символ = текст[позиция]
|
60
|
+
выбор символ
|
61
|
+
либо "u", "ю"
|
62
|
+
{
|
63
|
+
позиция += 1
|
64
|
+
конст исходная = позиция
|
65
|
+
позиция = позиция + 4 когда позиция + 4 < конец : конец
|
66
|
+
конст фрагмент = ФрагментТекста(начало = исходная, конец = позиция, текст)
|
67
|
+
конст код-символа =
|
68
|
+
прочитать-16р-целое-латиницы(фрагмент) когда символ == "u" :
|
69
|
+
прочитать-16р-целое-кириллицы(фрагмент) // когда символ == "ю"
|
70
|
+
результат += Символ(код-символа)
|
71
|
+
}
|
72
|
+
либо "/", "n"
|
73
|
+
{
|
74
|
+
позиция += 1
|
75
|
+
результат += "\/"
|
76
|
+
}
|
77
|
+
либо "<", "r"
|
78
|
+
{
|
79
|
+
позиция += 1
|
80
|
+
результат += "\<"
|
81
|
+
}
|
82
|
+
либо ">", "t"
|
83
|
+
{
|
84
|
+
позиция += 1
|
85
|
+
результат += "\>"
|
86
|
+
}
|
87
|
+
либо "\/"
|
88
|
+
{
|
89
|
+
позиция += 1
|
90
|
+
позиция = пропустить-пробелы-и-табуляции(текст, позиция, конец)
|
91
|
+
}
|
92
|
+
либо "\<"
|
93
|
+
{
|
94
|
+
позиция += 1
|
95
|
+
если позиция < конец и текст[позиция] == "\/"
|
96
|
+
{
|
97
|
+
позиция = пропустить-пробелы-и-табуляции(текст, позиция, конец)
|
98
|
+
}
|
99
|
+
}
|
100
|
+
либо " ", "\>"
|
101
|
+
{
|
102
|
+
позиция += 1
|
103
|
+
конст исходная = позиция
|
104
|
+
позиция = пропустить-пустую-строку(текст, позиция, конец)
|
105
|
+
если позиция > исходная
|
106
|
+
{
|
107
|
+
позиция = пропустить-пробелы-и-табуляции(текст, позиция, конец)
|
108
|
+
}
|
109
|
+
иначе
|
110
|
+
{
|
111
|
+
позиция = исходная
|
112
|
+
результат += символ
|
113
|
+
}
|
114
|
+
}
|
115
|
+
либо *
|
116
|
+
{
|
117
|
+
позиция += 1
|
118
|
+
результат += символ
|
119
|
+
}
|
120
|
+
}
|
121
|
+
}
|
122
|
+
либо *
|
123
|
+
{
|
124
|
+
конст начало = позиция
|
125
|
+
позиция = пропустить-неэкранированные-символы(текст, позиция, конец)
|
126
|
+
результат += текст.скопировать(начало, позиция - начало)
|
127
|
+
}
|
128
|
+
}
|
129
|
+
}
|
130
|
+
|
131
|
+
скрытая функция получить-отступ-в-тексте(текст: Текст): Текст?
|
132
|
+
{
|
133
|
+
результат = пусто
|
134
|
+
пусть позиция = текст.длина - 1
|
135
|
+
пока позиция >= 0
|
136
|
+
{
|
137
|
+
выбор текст[позиция]
|
138
|
+
либо " ", "\>"
|
139
|
+
{
|
140
|
+
позиция -= 1
|
141
|
+
}
|
142
|
+
либо "\/"
|
143
|
+
{
|
144
|
+
результат = текст.скопировать(позиция + 1, текст.длина - позиция - 1)
|
145
|
+
прервать цикл
|
146
|
+
}
|
147
|
+
либо *
|
148
|
+
{
|
149
|
+
прервать цикл
|
150
|
+
}
|
151
|
+
}
|
152
|
+
}
|
153
|
+
|
154
|
+
скрытая функция исключить-разделитель-строк-в-конце(текст: Текст, конец: Целое): Целое
|
155
|
+
{
|
156
|
+
результат = конец
|
157
|
+
если конец > 0 и текст.символ-по-позиции(конец - 1) == "\/"
|
158
|
+
{
|
159
|
+
если конец > 1 и текст.символ-по-позиции(конец - 2) == "\<"
|
160
|
+
{
|
161
|
+
результат = конец - 2
|
162
|
+
}
|
163
|
+
иначе
|
164
|
+
{
|
165
|
+
результат = конец - 1
|
166
|
+
}
|
167
|
+
}
|
168
|
+
}
|
169
|
+
|
170
|
+
скрытая функция пропустить-отступ(текст: Текст, начало: Целое, отступ: Текст): Целое
|
171
|
+
{
|
172
|
+
пусть позиция = 0
|
173
|
+
пока позиция < отступ.длина и начало + позиция < текст.длина и отступ[позиция] == текст[начало + позиция]
|
174
|
+
{
|
175
|
+
позиция += 1
|
176
|
+
}
|
177
|
+
результат = начало + позиция
|
178
|
+
}
|
179
|
+
|
180
|
+
скрытая функция пропустить-неэкранированные-символы(текст: Текст, начало: Целое, конец: Целое): Целое
|
181
|
+
{
|
182
|
+
результат = начало
|
183
|
+
пока результат < конец
|
184
|
+
{
|
185
|
+
конст символ = текст[результат]
|
186
|
+
если символ == "\\" или символ == "\/" или символ == "\<"
|
187
|
+
{
|
188
|
+
прервать цикл
|
189
|
+
}
|
190
|
+
результат += 1
|
191
|
+
}
|
192
|
+
}
|
193
|
+
|
194
|
+
скрытая функция пропустить-пустую-строку(текст: Текст, начало: Целое, конец: Целое): Целое
|
195
|
+
{
|
196
|
+
результат = начало
|
197
|
+
конст позиция = пропустить-пробелы-и-табуляции(текст, начало, конец)
|
198
|
+
если текст.символ-по-позиции(позиция) == "\/"
|
199
|
+
{
|
200
|
+
результат = позиция + 1
|
201
|
+
}
|
202
|
+
иначе если текст.символ-по-позиции(позиция) == "\<" и текст.символ-по-позиции(позиция + 1) == "\/"
|
203
|
+
{
|
204
|
+
результат = позиция + 2
|
205
|
+
}
|
206
|
+
}
|
207
|
+
|
208
|
+
скрытая функция пропустить-пробелы-и-табуляции(текст: Текст, начало: Целое, конец: Целое): Целое
|
209
|
+
{
|
210
|
+
результат = начало
|
211
|
+
пока результат < конец
|
212
|
+
{
|
213
|
+
конст символ = текст[результат]
|
214
|
+
если символ == " " или символ == "\>"
|
215
|
+
{
|
216
|
+
результат += 1
|
217
|
+
}
|
218
|
+
иначе
|
219
|
+
{
|
220
|
+
прервать цикл
|
221
|
+
}
|
222
|
+
}
|
223
|
+
}
|
@@ -0,0 +1,111 @@
|
|
1
|
+
|
2
|
+
функция прочитать-целое(текст: ФрагментТекста): Целое
|
3
|
+
{
|
4
|
+
если (текст.начинается-на("0x"))
|
5
|
+
{
|
6
|
+
конст фрагмент = текст.фрагмент(2, текст.длина - 2)
|
7
|
+
результат = прочитать-16р-целое-латиницы(фрагмент)
|
8
|
+
}
|
9
|
+
иначе если (текст.начинается-на("0ш"))
|
10
|
+
{
|
11
|
+
конст фрагмент = текст.фрагмент(2, текст.длина - 2)
|
12
|
+
результат = прочитать-16р-целое-кириллицы(фрагмент)
|
13
|
+
}
|
14
|
+
иначе если (текст.начинается-на("0b") или текст.начинается-на("0д"))
|
15
|
+
{
|
16
|
+
конст фрагмент = текст.фрагмент(2, текст.длина - 2)
|
17
|
+
результат = прочитать-2р-целое(фрагмент)
|
18
|
+
}
|
19
|
+
иначе
|
20
|
+
{
|
21
|
+
результат = прочитать-10р-целое(текст)
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
скрыто (в пакете)
|
26
|
+
функция прочитать-16р-целое-латиницы(текст: ФрагментТекста): Целое
|
27
|
+
{
|
28
|
+
результат = 0
|
29
|
+
пусть позиция = текст.длина - 1
|
30
|
+
пусть степень = 1
|
31
|
+
пока позиция >= 0
|
32
|
+
{
|
33
|
+
конст символ = текст[позиция]
|
34
|
+
если символ >= "0" и символ <= "9"
|
35
|
+
{
|
36
|
+
результат += (символ.код() - "0".код()) * степень
|
37
|
+
}
|
38
|
+
иначе если символ >= "A" и символ <= "F"
|
39
|
+
{
|
40
|
+
результат += (символ.код() - "A".код() + 10) * степень
|
41
|
+
}
|
42
|
+
иначе если символ >= "a" и символ <= "f"
|
43
|
+
{
|
44
|
+
результат += (символ.код() - "a".код() + 10) * степень
|
45
|
+
}
|
46
|
+
позиция -= 1
|
47
|
+
степень *= 16
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
скрыто (в пакете)
|
52
|
+
функция прочитать-16р-целое-кириллицы(текст: ФрагментТекста): Целое
|
53
|
+
{
|
54
|
+
результат = 0
|
55
|
+
пусть позиция = текст.длина - 1
|
56
|
+
пусть степень = 1
|
57
|
+
пока позиция >= 0
|
58
|
+
{
|
59
|
+
конст символ = текст[позиция]
|
60
|
+
если символ >= "0" и символ <= "9"
|
61
|
+
{
|
62
|
+
результат += (символ.код() - "0".код()) * степень
|
63
|
+
}
|
64
|
+
иначе если символ >= "А" и символ <= "Е"
|
65
|
+
{
|
66
|
+
результат += (символ.код() - "А".код() + 10) * степень
|
67
|
+
}
|
68
|
+
иначе если символ >= "а" и символ <= "е"
|
69
|
+
{
|
70
|
+
результат += (символ.код() - "а".код() + 10) * степень
|
71
|
+
}
|
72
|
+
позиция -= 1
|
73
|
+
степень *= 16
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
скрыто (в пакете)
|
78
|
+
функция прочитать-10р-целое(текст: ФрагментТекста): Целое
|
79
|
+
{
|
80
|
+
результат = 0
|
81
|
+
пусть позиция = текст.длина - 1
|
82
|
+
пусть степень = 1
|
83
|
+
пока позиция >= 0
|
84
|
+
{
|
85
|
+
конст символ = текст[позиция]
|
86
|
+
если символ >= "0" и символ <= "9"
|
87
|
+
{
|
88
|
+
результат += (символ.код() - "0".код()) * степень
|
89
|
+
}
|
90
|
+
позиция -= 1
|
91
|
+
степень *= 10
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|
95
|
+
скрыто (в пакете)
|
96
|
+
функция прочитать-2р-целое(текст: ФрагментТекста): Целое
|
97
|
+
{
|
98
|
+
результат = 0
|
99
|
+
пусть позиция = текст.длина - 1
|
100
|
+
пусть степень = 1
|
101
|
+
пока позиция >= 0
|
102
|
+
{
|
103
|
+
конст символ = текст[позиция]
|
104
|
+
если символ == "1"
|
105
|
+
{
|
106
|
+
результат += степень
|
107
|
+
}
|
108
|
+
позиция -= 1
|
109
|
+
степень *= 2
|
110
|
+
}
|
111
|
+
}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
|
2
|
+
тип ЯзыкПакета = вариант
|
3
|
+
{
|
4
|
+
английский = 0
|
5
|
+
русский = 1
|
6
|
+
}
|
7
|
+
|
8
|
+
конст языки: Массив<объект { язык: ЯзыкПакета; код: Текст; имена: Массив<Текст> }> =
|
9
|
+
[
|
10
|
+
автотип(язык = ЯзыкПакета.английский, код = "en", имена = ["english", "английский"]),
|
11
|
+
автотип(язык = ЯзыкПакета.русский, код = "ru", имена = ["рус", "русский", "rus", "russian"]),
|
12
|
+
]
|
13
|
+
|
14
|
+
функция язык-в-текст(язык: ЯзыкПакета): Текст
|
15
|
+
{
|
16
|
+
для э из языки
|
17
|
+
{
|
18
|
+
если э.язык == язык
|
19
|
+
{
|
20
|
+
вернуть э.код
|
21
|
+
}
|
22
|
+
}
|
23
|
+
вернуть языки[0].код
|
24
|
+
}
|
25
|
+
|
26
|
+
функция язык-из-текста(текст: Текст): ЯзыкПакета?
|
27
|
+
{
|
28
|
+
для э из языки
|
29
|
+
{
|
30
|
+
если э.код == текст
|
31
|
+
{
|
32
|
+
вернуть э.язык
|
33
|
+
}
|
34
|
+
иначе
|
35
|
+
{
|
36
|
+
для имя из э.имена
|
37
|
+
{
|
38
|
+
если Текст.сравнить(текст, имя) == 0
|
39
|
+
{
|
40
|
+
вернуть э.язык
|
41
|
+
}
|
42
|
+
}
|
43
|
+
}
|
44
|
+
}
|
45
|
+
вернуть пусто
|
46
|
+
}
|