Project

General

Profile

Язык 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>