Языки программирования с русским синтаксисом

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Таметко.

Сообщений 1 страница 11 из 11

1

Проект "Таметко"

0

2

Уважаемый Данил!

Не могли Вы изложить хотя бы кратко, не сочтите за труд, хоть какие-то идеи, которые Вас осенили? Что Вы хотите привнести нового в языки программирования? Каковы черты того языка, для которого Вы собираетесь сделать компилятор? В чём Вы видите миссию своего языка?

Пока что приходится констатировать, что число пользователей языков программирования, созданных отечественными одиночками-энтузиастами, не намного превышает число самих языков. За счёт чего Вы собираетесь переломить такую закономерность? В чём "фишка", которая привлечёт сначала любопытных, а затем более широкие слои программистской общественности?

С нетерпением жду Вашего ответа.

Отредактировано Юрий (23-08-2009 18:29:06)

0

3

---------- Это  с сайта -----
1. Основная цель проекта "Таметко" - создание языка программирования с русским синтаксисом.
2. Целевая платформа для языка - .Net (Windows), Mono (Linux, Mac, Windows).
3. Инструмент для создания языка - Coco/R C# .

Используемые файлы.

Модифицированная версия Coco/R.

Генератор компилятора.
Важно: работает с файлами, только в кодировке UTF-8.

Coco.exe - запускной файл.
Coco.exe.zip - сжатый запускной файл.

Исходный код.
Coco.r.src.zip

Файл описания языка "Таметко".

Используется как входной файл для Coco/R.
В основном вся информация в нём.
Tametko.atg (в разработке, имеет кодировку UTF-8).

Что нужно знать.

   1. Основы работы платформы .Net.
   2. Язык программирования C#.
   3. Принципы работы Генератора компиляторов Coco/R.

Что надо уметь.

   1. Пользоваться командной строкой.
   2. Пользоваться текстовым редактором (поддерживающим UTF-8).

0

4

Файл Таметко.atg

Код:
#region Объявление Используемых Пакетов
// Используется Coco/R.
// Вставляется в созданый файл.
using System.Collections;
#endregion

COMPILER Таметко

// Используется Coco/R.
// Вставляется в созданый файл.
// Возвращает н-ный токен от текущего токена
Token Заглянуть (int номер) {
  scanner.ResetPeek();
  Token токен = la;
  while (номер > 0) { токен = scanner.Peek(); номер--; }
  return токен;
}
// 
#region Глобальные Типы Методы Поля
// Это Имя Типа
bool ЭтоИмяТипа (ref Token pt) {
if(pt.kind == _идентификатор )
{
  pt = scanner.Peek();
  if( pt.kind == _двадвоеточия) 
  {
    pt = scanner.Peek();
    if (pt.kind != _идентификатор)
    {
      return false;
    }
    pt = scanner.Peek();
  }
  while(pt.kind == _точка)
  {
    pt = scanner.Peek();
    if (pt.kind != _идентификатор)
    {
      return false;
    }
  }
  return true;
}
else
  return false;
}

bool ЭтоПриведениеКТипу()
{  
  scanner.ResetPeek();
  if (la.kind != _леваяскобка) 
  { return false; }
  Token pt = scanner.Peek();
  if (!ЭтоИмяТипа(ref pt)) {
    return false;
  }
  if (pt.kind != _праваяскобка) {
    return false;
  }
  return true;
}

bool ЭтоПрисвоение()
{
	return la.kind == _идентификатор && Заглянуть(1).kind == _равно;
}

bool ЭтоПространствоИмен()
{
    return la.kind == _идентификатор && Заглянуть(1).kind == _двадвоеточия;
}

void Ошибка (string строкаОшибки) {
  if (errDist >= minErrDist) errors.SemErr(la.line, la.col, строкаОшибки);
  errDist = 0;
}

#endregion
/*------------------------------------------------------------------------*
 *----- Описание сканера    ----------------------------------------------* 
 *------------------------------------------------------------------------*/
CHARACTERS
#region Наборы символов
  таб                           = '\u0009'. /*  9 */
  конецСтроки                   = '\u000a'. /* 10 */
  возвратКаретки                = '\u000d'. /* 13 */
  новаяСтрока                   = возвратКаретки + конецСтроки. 

  СтартовыйСимволИдентификатора = 'A' .. 'Z' + 'a' .. 'z' + '_' + 'А' .. 'я' +'ё' + 'Ё'.
  СимволИдентификатора          = '0' .. '9' + 'A' .. 'Z' + 'a' .. 'z' + '_' + 'А' .. 'я' +'ё' + 'Ё'.
  число                         = "0123456789".
  шестьНадЦатьЧиселЛатиница     = число + "ABCDEFabcdef".
  шестьНадЦатьЧиселПоРусски     = число + "ЦОДТЧПцодтчп".
  неЦифра                       = ANY - число.

  символЗнак                    = ANY - новаяСтрока.
  символТекста                  = ANY - '"'.
  символСтроки                  = ANY - '"' - новаяСтрока.
  неНоваяСтрока                 = ANY - новаяСтрока .
  пробельныеСимволы             = " " + таб + '\u000b' + '\u000c'. /* */
#endregion    
TOKENS
#region Наборы Токенов

идентификатор =
  // Знак "!" используется когда имя идентификатора совпадает с ключевым словом.
  ['!']
  СтартовыйСимволИдентификатора
  {
  СимволИдентификатора
  }
.

/*--------------------------------------------------------------------------------*/
целое =
    число { число }
    // Используется для русского написания шестнадцатеричного числа.
    | (( "0х" | "0Х" ) шестьНадЦатьЧиселПоРусски { шестьНадЦатьЧиселПоРусски })
    | (( "0x" | "0X" ) шестьНадЦатьЧиселЛатиница { шестьНадЦатьЧиселЛатиница })
.
/*--------------------------------------------------------------------------------*/
вещественное = число {число} ( "," число {число} ).
/*--------------------------------------------------------------------------------*/
// написание символа !"в"
символ = "!" "\"" ( символЗнак | "\"\"" ) "\"".
/*--------------------------------------------------------------------------------*/
строка = "\"" { символТекста | "\"\"" } "\"".
/*---------------------------------------------------------------------------------*/
#endregion
  /*----- зарезервированные ключевые слова -----*/
#region Ключевые слова
	внешний     = "внешний".
	сборка    	= "сборка".
	модульслово    = "модуль".
	пакет    	= "пакет".
	пакета    	= "пакета".
	импорт    	= "импорт".
	импорта    	= "импорта".
	класс    	= "класс".
	класса    	= "класса".
	метод    	= "метод".
	метода    	= "метода".
	атрибут    	= "атрибут".
	доступ    	= "доступ".
	статический    = "статический".
	открытый    = "открытый".
	закрытый    = "закрытый".
	внутренний    = "внутренний".
	защищённый    = "защищённый".
	расширяет    = "расширяет".
	реализует    = "реализует".

	возврат    	= "возврат".
	конструктор    = "конструктор".
	оператор    = "оператор".
	да    	= "да".
	нет    	= "нет".
	
	начало    	= "начало".
	конец     	= "конец".
	
	если    	= "если".
	тогда    	= "тогда".
	иначе    	= "иначе".
	выбор    	= "выбор".
	из    	= "из".
	вариант    	= "выриант".
	выбрать    	= "выбрать".
	выбора    	= "выбора".
	пока    	= "пока".
	цикл    	= "цикл".
	цикла    	= "цикла".
	прервать    = "прервать".
	продолжить    = "продолжить".
	выбросить    = "выбросить".
	защита    	= "защита".
	завершить    = "завершить".
	защиты    	= "защиты".
	исключение    = "исключение".
	этот    	= "этот".
	родитель    = "родитель".
	новый    	= "новый".
	размер    	= "размер".
	или    	= "или".
	и    	= "и".
	ИЛИ    	= "ИЛИ".
	ИСКЛЮЧИТЬ    = "ИСЛЮЧИТЬ".
	И    	= "И".
	ИНВЕРТИРОВАТЬ    = "ИНВЕРТИРОВАТЬ".
	неравно    	= "<>".
	не    	= "не".
	равно    	= "=".
	равнослово    = "равно".
	меньше    	= "<".
	больше    	= ">".
	меньшеслово    = "меньше".
	большеслово    = "больше".
	плюс    	= "+".
	минус    	= "-".
	умножить    = "*".
	разделить    = "/".
	модуль    	= "%".
	точка    	= ".".
	запятая    	= ",".
	двоеточие    = ":".
	точкасзапятой    = ";".
	двадвоеточия    = "::".
	леваяскобка    = "(".
	праваяскобка    = ")".

#endregion
PRAGMAS
#region Дерективы
  ппОпределить          = "%%" {пробельныеСимволы} "определить" {неНоваяСтрока} новаяСтрока.	// (. AddCCS(la.val); .)
  ппОтменить            = "%%" {пробельныеСимволы} "отменить" {неНоваяСтрока} новаяСтрока.  	//(. RemCCS(la.val); .)
  ппЕсли                = "%%" {пробельныеСимволы} "если" {неНоваяСтрока} новаяСтрока.   //  (. IfPragma(la.val); .)
  ппИначе        = "%%" {пробельныеСимволы} "иначе" {пробельныеСимволы} новаяСтрока.   	//(. ElifOrElsePragma(); .)
  ппИначеЕсли    	= "%%" {пробельныеСимволы} "иначе" {пробельныеСимволы} "если"  {неНоваяСтрока} новаяСтрока.   //(. ElifOrElsePragma(); .)
  ппСтрока        = "%%" {пробельныеСимволы} "строка" {неНоваяСтрока} новаяСтрока.
  ппОшибка       = "%%" {пробельныеСимволы} "ошибка" {неНоваяСтрока} новаяСтрока.
  ппВнимание     = "%%" {пробельныеСимволы} "внимание" {неНоваяСтрока} новаяСтрока.
  ппОбласть      = "%%" {пробельныеСимволы} "область" {неНоваяСтрока} новаяСтрока.
  ппКонец       = "%%" {пробельныеСимволы} "конец" {пробельныеСимволы} "если" {неНоваяСтрока} новаяСтрока.
  ппКонецОбласти  	= "%%" {пробельныеСимволы} "конец" {пробельныеСимволы} "области" {неНоваяСтрока} новаяСтрока.
 #endregion
//COMMENTS FROM "/*" TO "*/"       
COMMENTS FROM "//" TO конецСтроки

IGNORE конецСтроки 
IGNORE возвратКаретки
IGNORE таб

PRODUCTIONS
#region Таметко
// Компилятору Таметко на вход, как параметр командной строки подаётся каталог в котором находятся файлы на языке Таметко.
// Расширение папки "сборка".
// Всю дополнительную информацию компилятор берет из файлов и вложенных папок, находящихся в этом каталоге.
// Виды файлов используемые Таметко:
// 1. Файл описания параметров сборки, имеет имя объемлющего каталога и расширение "модуль".
//      Может отсутствовать. Если отсутствует параметры сборки и текущего модуля, устанавливаются по умолчанию;
// 2. Файл описания типа, имеет произвольное имя (по правилам написания идентификаторов)имеет расширение "тип"
//      например: "ИмяТипа.тип".
//      Если имя типа начинается с "." тогда тип не виден из сборки т.е. он считается внутренним,
//      и будет использоваться компилятором если на него будут ссылаться другие типы определнные в этой сборке.
//      Может отсутствовать;
// 3. Файла вложенного типа. Пример: "ИмяТипа.ИмяВложенногоТипа.тип", имеет расширение "тип". Файл с типом владельцем
//      должен существовать, в противном случае файл вложенного типа будет прпущен;
// 4. Вложенная Папка с расширением "пакет", имеет произвольное имя (по правилам написания идентификаторов)
//      используется для описания пакетов используемых в данной сборке текущего модуля.
//      Если имя Пакета начинается с "." тогда компилятор её пропускает и в сборке она не участвует;
// 5. Вложенная Папка с расширением "ресурсы", служит для хранения ресурсов (значки, музыкальные файлы и т.д.)
//      используемых в сборке.
//      Может отсутствовать;
// 6. Вложенная Папка с расширением "модуль", дополнительный модуль принадлежащий текущей сборке.
//      Содержит описания Типов, ПодТипов, Пакетов, Ресурсов, а также файл с именем текущего модуля имеющим
//      расширение "модуль", в котором находится описание параметров модуля.
//      Может отсутствовать. Если отсутствует, параметры модуля устанавливаются по умолчанию.
//      При компиляции будет создан отдельный файл.
//      Может отсутствовать.

Таметко =
  Сборка
  (
  Импорт
  (
  Модуль
  |Тип
  )
  )
.
#endregion

#region ВнешнийПсевдоним
// Внешнее имя используемй сборки (псевдоним) передаётся через параметры командной строки в компилятор.
// пример /п:Форма=Формы.dll
ВнешнийПсевдоним =
  {
  "использовать" "сборку"
  идентификатор  "=" строка ";"
  }
.
#endregion
#region Импорт
// Секция определения Импорта.
Импорт =
// Обязательное использование хотя бы одного импортируемого пакета,
// так как мы всегда используем ту или иную сборку и пакеты из неё.
СтрокаИмпортаПакета
{
СтрокаИмпортаПакета
}
.
#endregion
#region Строка Импорта Пакета
СтрокаИмпортаПакета =
"импорт"
// Псевдоним Пакета. Может отсутствовать .
[
IF(ЭтоПрисвоение()) идентификатор
"="
]
ИмяТипа ";"
.
#endregion
#region Имя Типа
ИмяТипа =
  идентификатор  
  [
  // если в переди псевдоним внешней сборки.
  ":::" идентификатор
  ]
  {
  "::" идентификатор
  }
.
#endregion
#region Сборка
Сборка =
  // Внешнее имя используемй сборки (псевдоним).
  // Обязательно.
  ВнешнийПсевдоним
  // Область Импорта, обязательна, так как мы всегда используем ту или иную сборку и пакеты из неё. 
  [ Импорт ]
  "сборка"
  // Атрибут сборки.
  // Может отсутствовать.
  {
  "(*"
  {
  АтрибутПользователя ";"
  }
  "*)"
  }
  // Имя сборки.
  идентификатор
  ";"
.
#endregion
#region Модуль
Модуль =
  "модуль"
  // Атрибут сборки.
  // Может отсутствовать.
  {
  "(*"
  {
  АтрибутПользователя ";"
  }
  "*)"
  }
  // Имя сборки.
  идентификатор
  ";"
.
#endregion
#region Тип
// Описание Типов.
Тип =  
  Класс
//|Структура
//|Интерфейс
//|Перечисление
//|Делегат
.
#endregion
/////////////////////////////////////////
#region Класс
// Тип вида - Класс
// На ряду с внутренними членами, может иметь Вложенный Тип.
Класс =
  "класс"
  // Атрибуты класса: данные о классе.
  { АтрибутКласса }
  идентификатор
  "начало" ":" 
  {
  Метод 
  //[ Свойство ]
  //[ Оператор ]
  //[ Поле ]
  | "тип"
  {
  "(*"
  АтрибутДоступа
  "*)"
  }
  идентификатор ";"
  }
  "конец" "класса" ";"
.
#endregion
///////////////////////////////////////////////////// Атрибуты ////////////////////////////////////////////////////////

#region Атрибут Класса
АтрибутКласса =
  "(*"
  {
  (
  АтрибутДоступа
  |АтрибутСтатический
  |"абстрактный" "=" ( "да" | "нет" )
  |"запечатанный" "=" ( "да" | "нет")
  |"расширяет" "=" ИмяТипа
  |"реализует" "=" ИмяТипа { "," ИмяТипа }
  |АтрибутПользователя
  )
  ";"
  }
  "*)"
.
#endregion
#region Атрибут доступа
АтрибутДоступа = 
  "доступ" "=" 
  (
  "внутренний"
  | ( "защищённый" ["внутренний"] )
  )
.
#endregion
#region Атрибут статический
АтрибутСтатический =
  "статический" "=" ("да" | "нет")
.
#endregion
#region Атрибут виртуальный
АтрибутВиртуальный =
  "виртуальный" "=" ( "да" | "нет")
.
#endregion
#region Атрибут Новый
АтрибутНовый =
  "новый" "=" ( "да" | "нет" )
.
#endregion
#region Атрибут Переопределение
АтрибутПереопределение =
  "переопределение" "=" ( "да" | "нет" )
.
#endregion
#region Атрибут Пользователя
АтрибутПользователя =
  ИмяТипа [ АргументыАтрибута ]
.
#endregion
#region Агументы Атрибута
АргументыАтрибута                                               (. bool именованныйПараметр = false; .)
=
"("
[ 
  [IF(la.kind == _идентификатор && Заглянуть(1).kind == _равно)
  идентификатор 
  "="                                                           (. именованныйПараметр = true; .)
  ] 
  Выражение
  { 
  ","
  (IF(la.kind == _идентификатор && Заглянуть(1).kind == _равно)
  идентификатор
  "="                                                            (. именованныйПараметр = true; .)
  |                                                              (. if (именованныйПараметр)
                                                                      Ошибка("Позиционный параметр не может стоять за Именованным параметром.");
                                                                  .)
  )
  Выражение
  }
]
")"
.
#endregion
#region Атрибут Параметра
АтрибутПараметра =
  "(*"
  {
  (
 "тип" "=" ИмяТипа
  |АтрибутПользователя
  )
  ";"
  }
  "*)"
.
#endregion
#region Атрибут Возврата
АтрибутВозврата =
  "(*"
  {
  (
  "тип" "=" ИмяТипа
  |АтрибутПользователя
  )
  ";"
  }
  "*)"
.
#endregion
#region Атрибут Метода
АтрибутМетода
=
"(*"
{
АтрибутДоступа
|АтрибутСтатический
|АтрибутНовый
|АтрибутПереопределение
|("внешний" "=" ( "да" | "нет" ))
|АтрибутВиртуальный
|АтрибутПользователя
";"
}
"*)"
.
#endregion
/////////////////////////////////////////
#region Метод
 //Метод объекта
 //Есть два предопределенных имени метода: конструктор и оператор
Метод =
  "метод"
  { АтрибутМетода }
  ( идентификатор | "конструктор" |  "оператор"  )
  "("
  [
  "параметр"
  { АтрибутПараметра }
  идентификатор
  { ","
  "параметр"
  { АтрибутПараметра} идентификатор 
  }
  ]
  ")"
  [
  "возврат"
  { АтрибутВозврата }
  ]
  "начало" ":"
  {
  Инструкция
  }
  "конец" "метода" ";"
.
#endregion
#region Переменная
// Переменные метода
Переменная =
  "переменная"
  "(*" [ "тип" "=" ИмяТипа [ ";" ] ] "*)"
  идентификатор
  [ "=" Выражение ]
  ";"
.
#endregion
#region Константа
//////////////////////////////////////////////
//Константа =
Константа =
  "константа"
  "(*" [ "тип" "=" ИмяТипа [ ";" ] ] "*)"
  идентификатор
  "=" Выражение
  ";"
.
#endregion 
/*------------------------------------------------------------------------*
 *------------------------------ Инструкции ------------------------------*
 *------------------------------------------------------------------------*/
#region Инструкция
Инструкция                                                                     
=
  Константа
  | Переменная
  | ВложеннаяИнструкция
.
#endregion
 #region Вложенная Инструкция
ВложеннаяИнструкция                                                            
=
  ";"
  | ( ВыражениеИнструкция ";" )
  | (
    "если"  Выражение  "тогда" ":"
    ВыражениеИнструкция 
    [ "иначе" ВыражениеИнструкция ] "конец" "если" ";"
    )
  | (
    "выбор" "из" Выражение  ":"
    ( 
      ("вариант" Выражение ":")
      | ("выбрать" ":")
    )
    Инструкция
    "конец" "выбора" ";"
    )
  | (
    "пока" Выражение "цикл" ":"
    ВложеннаяИнструкция
    "конец" "цикла" ";"
    )
  | (
    "цикл" ":"
    ВложеннаяИнструкция
    "пока" Выражение "конец" "цикла" ";"
    )
  | (
    "для" 
    ( ИнициализаторДля "по" Выражение "шаг"  ИтераторДля )
    | ( "каждого" ИмяТипа идентификатор "из" Выражение )
    "цикл" ":"
    ВложеннаяИнструкция
    "конец" "цикла" ";"
    )
  | "прервать" ";"
  | "продолжить" ";"
  | "возврат" [ Выражение ] ";"
  | "выбросить" [ Выражение ] ";"
  | (
    "защита" ":"
     { Инструкция }
    (
    Исключение
    [ "завершить" ":" { Инструкция } ] | "завершить" ":" { Инструкция }
    )
    "конец" "защиты" ";"
    )
.
#endregion
#region Выражение Инструкция
ВыражениеИнструкция                	(. bool этоПрисваивание = la.kind == _плюс && la.kind == _минус && la.kind == _не && 
                la.kind == _ИНВЕРТИРОВАТЬ && ЭтоПривидениеКТипу();
             .)
=
  Унарное
  ( "=" Выражение
  |                                              (. if (этоПрисваивание) Ошибка("Ошибка присваивания."); .)
  )
.
#endregion
#region Вложенная Инструкция Инициализатор Для
ИнициализаторДля
=
  Переменная
  | ВыражениеИнструкция { "," ВыражениеИнструкция }
.
#endregion
#region Вложенная Инструкция итератор для
ИтераторДля
=
  ВыражениеИнструкция { "," ВыражениеИнструкция }
.
#endregion
#region Вложенная Инструкция исключение
Исключение
=
  "исключение" 
  ( ":" Инструкция
  |  ИмяТипа [ идентификатор ] ":" Инструкция [ Исключение ]
  )
.
#endregion
/*------------------------------------------------------------------------*
 *-----------------------------  Выражения  ------------------------------*
 *------------------------------------------------------------------------*/
#region Выражение
Выражение
=
  Унарное
  (
  "=" Выражение
  | илиВыражение
  )
.
#endregion
#region Аргумент
Аргумент =
  ["ссылка" | "значение"]
  Выражение
.
#endregion
#region Начальный
Начальный =
  
  (
  Литерал
  | идентификатор 
  | "(" Выражение ")"
  | "этот"
  | "родитель"  "." идентификатор
  | "новый" ИмяТипа "(" [ Выражение { "," Выражение } ] ")"
  | "размер" "(" ИмяТипа ")"
  )
  {
    IF( la.kind == _точка || !ЭтоПревидениеКТипу()  )
    (
    "." идентификатор
    | ( "(" [ Аргумент { "," Аргумент } ] ")")
    )
  }
.
#endregion
#region Выражение или 
илиВыражение
= ИВыражение {"или" Унарное ИВыражение}
.
#endregion
#region Выражение и
ИВыражение
= БитовоеИЛИВыражение {"и" Унарное БитовоеИЛИВыражение}
.
#endregion
#region Выражение Битовое ИЛИ
БитовоеИЛИВыражение
= БитовоеИСКЛЮЧИТЬВыражение {"ИЛИ" Унарное БитовоеИСКЛЮЧИТЬВыражение}
.
#endregion
#region Выражение Битовое ИСКЛЮЧИТЬ
БитовоеИСКЛЮЧИТЬВыражение
= БитовоеИВыражение {"ИСКЛЮЧИТЬ" Унарное БитовоеИВыражение}
.
#endregion
#region выражение Битовое И
БитовоеИВыражение
= РавенствоВыражение { "И" Унарное РавенствоВыражение }
.
#endregion
#region Выражение равенство, не равенство
РавенствоВыражение
= БольшеМеньшеВыражение  
{ IF( la.kind == _не && Заглянуть(1).kind == _равно )
(("не" "равно") | "<>"   ) 
Унарное 
БольшеМеньшеВыражение
}
.
#endregion
#region Выражение больше меньше
БольшеМеньшеВыражение
= СдвигВыражение
{ IF( Заглянуть(1).kind == _или )
( 
  ( ("меньше" "или" "равно") | "<=" )
| ( ("больше" "или" "равно") | ">=" )
)
| 
(
  ( "меньше" | "<" ) 
| ( "больше" | ">" ) 
)
Унарное 
СдвигВыражение 
// | ("is" | "as") ResolvedType
}
.
#endregion
#region Выражение битовый сдвиг
СдвигВыражение
= СложениеВычитаниеВыражение
  { //IF (IsShift())
  ( ( "<<" | "ВЛЕВО" ) | ( ">>" | "ВПРАВО" ) )
  Унарное 
  СложениеВычитаниеВыражение
  }
.
#endregion
#region Выражение Сложение Вычитание
СложениеВычитаниеВыражение
= УмножениеДелениеМодульВыражение
{IF ( la.kind == _плюс && la.kind == _минус )
( "+" | "-" ) 
Унарное 
УмножениеДелениеМодульВыражение 
}
.
#endregion
#region Выражение умножение деление модуль
УмножениеДелениеМодульВыражение
= {("*" | "/" | "%") Унарное}
.
#endregion
#region Выражение унарное
Унарное                                                                        
=
  {
  IF( la.kind == _плюс || la.kind == _минус || la.kind == _не || la.kind == _ИНВЕРТИРОВАТЬ || ЭтоПриведениеКТипу() )
  ( "+"
  | "-" 
  | "не"
  | "ИНВЕРТИРОВАТЬ"
  |  "(" ИмяТипа ")"
  )
  }
  Начальный
.
#endregion
#region Литерал
Литерал 
=	целое | вещественное | символ | строка
.
#endregion
END Таметко.

0

5

Я понял, что вы решили не использовать символы кириллицы ЎўЄєЇї, которые есть в других славянских языках: сербском, болгарском, украинском?

0

6

А какая надежность языка?

0

7

Содержимое сайта обновлено.
Таметко

Вопросы правомерные но на них ответа нет.
:)

0

8

В распакованном архиве имена файлов и каталогов написаны "гречкой" - проблемы с кодировкой. Я смотрю из под Windows 7 Rus

0

9

Проблемы с "гречкой", устранил.

Перезагрузил файлы.
Пробовал открывать архивы в Windows и Linux.
У меня всё открылось нормально.

0

10

какой то русский язык .а написано всё по иностранному.ура!гитлер рад.

0

11

написано -методы поля- здеся где то .а какое поле .поле это ПОЛЕ.ерунда.надо полностью писать.это всё учителя виноваты .учили пушкина а он не кумекал по русски.надо говорить -скока,ежели и так подобно .а то нет слов и идёт нецензурщина.а почему матом а не патом?.вот почта та же.надо в почте чтоб всё по полочкам было письма от писцов чтоб класть по ячейкам и оно в слою ячейку идёт уже само .и смотриш тока ячейки .а то всё в 1 кучу.

0