Project

General

Profile

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