EnglishРусский  

Реклама

Инсталлятор CreateInstall
Бесплатные и коммерческие инсталляторы

Краткий обзор Gentee

Введение

Язык программирования Gentee можно отнести к разряду процедурных языков с некоторыми возможностями объектно-ориентированного программирования. Он не имеет сложных конструкций и прост в использовании, но в тоже время является мощным инструментом для решения самых различных задач. Синтаксис языка основан на синтаксисе языка программирования С и имеет много общего с другими С-подобными языками C++, Java, C#. У Gentee есть те же самые числовые типы int, uint, byte, ubyte, long, double, float, ... и такие же операции над ними +, ==, <, >, -, /, +=, ++, --, /=,... как в других подобных языках программирования. При написании программ вы можете использовать все основные конструкции, которые встречаются в других языках. Например, такие как: while, if, for, with, foreach, switch, include .

Единицей компиляции Gentee является описание-команда. Ниже приведены примеры описания глобальных переменных и макросов.

global
{
   uint  i my = 0xFF
   str   name = "Alexey"
   arrstr colour = %{"red", "green", "blue" }
}

define 
{
   PATH = $"c:\temp\docs"
   FLAG = 0x0001
}

Если для обращения к переменной или вызова функции достаточно указать ее имя и параметры ( в случае функции ), то для подстановки макроса необходимо добавлять слева '$'. Значения макросов подставляются на этапе компиляции.

i = my | $FLAG

Типы

Кроме базовых числовых и встроенных типов buf, str, collection можно описывать свои типы с помощью команды type.

type mytype_a
{
   uint id
   str  name
}

Переменные любого типа не требуют дополнительной инициализации после своего описания, вы сразу можете обращаться к этой переменной. Обращение к полям типа происходит с помощью операции '.'. Типы могут наследоваться как в объектно-ориентированных языках, при этом обеспечивается полиморфизм операций. Если отсутствует метод или функция для какой-то переменной определенного типа, то будут искаться аналогичные методы для ее типов-родителей. Для любых типов можно определить и использовать операции используемые для числовых типов ( =, +=, ==, != ), а также цикл foreach.

type mytype_b<inherit = mytype_a> : double d

operator mytype_b =( mytype_b left, mytype_a right )
{
   left.id = right.id
   left.name = right.name
   return left
}

Функции

Gentee имеет три вида команд для определения исполняемого кода: func, method, operator. Исполнение программы начинается с функции, имеющей атрибут main.

func - Обычная функция, которая отвечает за выполнение указанных в ней действий.

func hello< main >
{
   print("Hello, World!")
   getch()
}

method - Функция, привязанная к определенному типу. Вызов метода подобен взятию поля у типа и осуществляется с помощью '.', за которой следует имя метода и параметры.

method uint str.islastchar( uint ch )
{
   return this[ *this - 1 ] == ch
}

func myfunc
{
   str my = "String"
   print( my.islastchar( 'g' ))
}

operator - Данная команда позволяет определять и использовать в дальнейшем для любых типов операторы присваивания, сравнения, арифметические операторы и т.д.

operator str +=( str left, uint i )
{
   return left += str( i ) 
}

func myfunc : print( "Value = " += 100 )

Gentee - язык строгой типизации. Это накладывает определенные ограничения при программировании, но с другой стороны значительно уменьшает вероятность появления ошибок. Допускается присутствие нескольких функций или методов с одним и тем же именем, но они должны иметь хотя бы один различающийся параметр или разное количество параметров.

Строки

Gentee имеет широчайшие возможности по работе со строками. Строки определяются с помощью двойных кавычек и имеют управляющий символ '\'. Если строка начинается с '$', то она не будет учитывать управляющий символ. Кроме подстановки специальных символов, управляющий символ дает возможность вставлять данные из файлов, вычислять и подставлять выражения внутри строки, а также подставлять макросы.

print( "Name = \( name += " gentee" ) Path = \$PATH\n")

Часто бывает необходимо вывести большие объемы текста, причем часть текста должна формироваться динамически. В этом случае удобно использовать text-функции. Они могут осуществлять вывод в строку, которую вы указали при вызове, или на консоль.

text mytext( uint x )
Some text 
x = \( x )
x * x = \( x*x )
\{ uint i
   fornum i, 5
   {
      @"x * \( i ) = \( x * i )\l"
   }
}
Some text
\!

Импорт функций и использование Gentee в других приложениях

Gentee сразу разрабатывался таким образом, чтобы можно было, с одной стороны, импортировать функции из DLL (или аналогичных модулей на других ОС) и, с другой стороны, чтобы можно было использовать компилятор Gentee из программ, написанных на других языках программирования.

Если вам необходимо импортировать функции из DLL, то достаточно указать имя DLL файла и описать импортируемые функции.

import "kernel32.dll" {
   uint CloseHandle( uint )
        ExitProcess( uint )
   uint GetModuleFileNameA( uint, uint, uint ) -> GetModuleFileName
}

Если вы хотите компилировать файлы на языке Gentee и исполнять их из своего приложения, то вам достаточно взять файл gentee.dll и вызывать необходимые интерфейсные функции. Модуль gentee.dll можно использовать бесплатно, но необходимо соблюдать лицензионное соглашение.

Заключение

Скажем несколько слов о работе компилятора. Исходные тексты компилятора на языке программирования C находятся в открытом доступе, так как Gentee является проектом с открытыми исходными текстами. Скорость компиляции очень высокая. В результате компиляции программы создается байт-код, который можно сохранить в файл или выполнить сразу. Сохраненный байт-код можно запускать без повторной компиляции, а можно использовать в качестве библиотечного модуля в других программах. Следует заметить, что имеется набор готовых библиотек, который постоянно пополняется и помогает создавать программы самой различной сложности. Кроме этого, возможно создание исполняемых ( exe ) файлов.

Мы показали только основные моменты, характерные для языка программирования Gentee. Вы всегда можете найти на этом сайте дополнительную информацию и обсудить любые вопросы с разработчиками и другими пользователями Gentee.

Редактировать