Язык nML синтаксис операторы примеры » History » Version 8
Alexander Protsenko, 03/28/2022 03:11 PM
1 | 2 | Alexander Protsenko | *Язык nML: синтаксис, операторы, примеры* |
---|---|---|---|
2 | |||
3 | h1. История языка nML |
||
4 | |||
5 | h1. Синтаксис языка nML |
||
6 | |||
7 | 8 | Alexander Protsenko | h3. Ключевое слово: *struct* |
8 | |||
9 | В языке nML можно объявить структуру данных: |
||
10 | <pre> |
||
11 | struct class_structure ( |
||
12 | id_class: u16, |
||
13 | super_class: u16 |
||
14 | ) |
||
15 | </pre> |
||
16 | |||
17 | Работа с полями структуры |
||
18 | <pre> |
||
19 | var id_class[u16] |
||
20 | |||
21 | temp_class.id_class = id_class; |
||
22 | </pre> |
||
23 | |||
24 | Сохранение структуры в память: |
||
25 | <pre> |
||
26 | temp_class.id_class = id_class; |
||
27 | temp_class.super_class = super_class; |
||
28 | |||
29 | GLOBAL_MEM[class_index]::GLOBAL_MEM[class_index + 1] = temp_class; |
||
30 | </pre> |
||
31 | |||
32 | 7 | Alexander Protsenko | h3. Ключевое слово: *mode* |
33 | |||
34 | Пример: |
||
35 | У нас заданы регистры VR через ключевое слово mode: |
||
36 | <pre>mode VR (i: card(5)) = VREG [i] |
||
37 | syntax = format("v%d", i) |
||
38 | image = format("%5s", i)</pre> |
||
39 | При работе с регистрами данного типа, мы можем получить индекс регистра i: |
||
40 | <pre>op vsub(vd: VR, vs1: VR, vs2: VR) |
||
41 | action = { |
||
42 | vsub_cycle_vv(VR(vd.i), VR(vs2.i), VR(vs1.i)).action; |
||
43 | vsub_cycle_vv(VR(vd.i + 1), VR(vs2.i + 1), VR(vs1.i + 1)).action; |
||
44 | }</pre> |
||
45 | |||
46 | 2 | Alexander Protsenko | h1. Ключевые операторы языка nML и примеры кода |
47 | |||
48 | h3. Оператор преобразования типа: *cast* |
||
49 | |||
50 | h3. Оператор присвоения типа: *сoerce* |
||
51 | |||
52 | h1. Использование библиотеки softfloat для работы с числами с плавающей точкой |
||
53 | 3 | Alexander Protsenko | |
54 | В языке nML, используемом в инструменте MicroTESK, для создание типа чисел с плавающей точкой необходимо использовать ключевое слово *float(мантисса, показатель степени)*. |
||
55 | Пример: |
||
56 | <pre> |
||
57 | type FLOAT16 = float(10, 5) |
||
58 | type FLOAT32 = float(23, 8) |
||
59 | type FLOAT64 = float(52, 11) |
||
60 | type FLOAT128 = float(112, 15) |
||
61 | </pre> |
||
62 | 4 | Alexander Protsenko | |
63 | *float_rounding_mode* - параметр содержащий режим округления. В соответствии с этим параметром происходит округление при обработке операций библиотекой. |
||
64 | |||
65 | В настоящий момент поддерживается 5 режимов округления: |
||
66 | * round_nearest_even(0), |
||
67 | * round_up(1), |
||
68 | * round_down(2), |
||
69 | * round_to_zero(3), |
||
70 | 5 | Alexander Protsenko | * round_near_maxMag(4); |
71 | |||
72 | Операторы преобразования чисел с плавающей точкой: |
||
73 | 6 | Alexander Protsenko | * число float = int_to_float(тип float, число int) |
74 | * целое число = float_to_int(тип целое число, число float) |
||
75 | |||
76 | Примеры преобразований: |
||
77 | <pre>var fp_32[FLOAT32] |
||
78 | var word_32[WORD] |
||
79 | word_32 = float_to_int(WORD, fp_32);</pre> |
||
80 | |||
81 | <pre>var fp_32[FLOAT32] |
||
82 | var int_32[int(32)] |
||
83 | fp_32 = int_to_float(FLOAT32, int_32);</pre> |