Actions
Язык nML: синтаксис, операторы, примеры
История языка nML¶
Синтаксис языка nML¶
Ключевое слово: struct¶
В языке nML можно объявить структуру данных:
struct class_structure ( id_class: u16, super_class: u16 )
Работа с полями структуры
var id_class[u16] temp_class.id_class = id_class;
Сохранение структуры в память:
temp_class.id_class = id_class; temp_class.super_class = super_class; GLOBAL_MEM[class_index]::GLOBAL_MEM[class_index + 1] = temp_class;
Ключевое слово: mode¶
Пример:
У нас заданы регистры VR через ключевое слово mode:
mode VR (i: card(5)) = VREG [i] syntax = format("v%d", i) image = format("%5s", i)
При работе с регистрами данного типа, мы можем получить индекс регистра i:
op vsub(vd: VR, vs1: VR, vs2: VR) action = { vsub_cycle_vv(VR(vd.i), VR(vs2.i), VR(vs1.i)).action; vsub_cycle_vv(VR(vd.i + 1), VR(vs2.i + 1), VR(vs1.i + 1)).action; }
Ключевые операторы языка nML и примеры кода¶
Оператор преобразования типа: cast¶
Оператор присвоения типа: сoerce¶
Использование библиотеки softfloat для работы с числами с плавающей точкой¶
В языке nML, используемом в инструменте MicroTESK, для создание типа чисел с плавающей точкой необходимо использовать ключевое слово float(мантисса, показатель степени).
Пример:
type FLOAT16 = float(10, 5) type FLOAT32 = float(23, 8) type FLOAT64 = float(52, 11) type FLOAT128 = float(112, 15)
float_rounding_mode - параметр содержащий режим округления. В соответствии с этим параметром происходит округление при обработке операций библиотекой.
В настоящий момент поддерживается 5 режимов округления:- round_nearest_even(0),
- round_up(1),
- round_down(2),
- round_to_zero(3),
- round_near_maxMag(4);
- число float = int_to_float(тип float, число int)
- целое число = float_to_int(тип целое число, число float)
Примеры преобразований:
var fp_32[FLOAT32] var word_32[WORD] word_32 = float_to_int(WORD, fp_32);
var fp_32[FLOAT32] var int_32[int(32)] fp_32 = int_to_float(FLOAT32, int_32);
Updated by Alexander Protsenko over 2 years ago · 8 revisions