Таметко.
Сообщений 1 страница 11 из 11
Поделиться223-08-2009 15:22:42
Уважаемый Данил!
Не могли Вы изложить хотя бы кратко, не сочтите за труд, хоть какие-то идеи, которые Вас осенили? Что Вы хотите привнести нового в языки программирования? Каковы черты того языка, для которого Вы собираетесь сделать компилятор? В чём Вы видите миссию своего языка?
Пока что приходится констатировать, что число пользователей языков программирования, созданных отечественными одиночками-энтузиастами, не намного превышает число самих языков. За счёт чего Вы собираетесь переломить такую закономерность? В чём "фишка", которая привлечёт сначала любопытных, а затем более широкие слои программистской общественности?
С нетерпением жду Вашего ответа.
Отредактировано Юрий (23-08-2009 18:29:06)
Поделиться326-08-2009 22:29:30
---------- Это с сайта -----
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).
Поделиться426-08-2009 22:32:32
Файл Таметко.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 Таметко.
Поделиться528-08-2009 19:34:20
Я понял, что вы решили не использовать символы кириллицы ЎўЄєЇї, которые есть в других славянских языках: сербском, болгарском, украинском?
Поделиться629-08-2009 20:32:43
А какая надежность языка?
Поделиться710-09-2009 00:28:26
Содержимое сайта обновлено.
Таметко
Вопросы правомерные но на них ответа нет.
Поделиться823-09-2009 13:27:33
В распакованном архиве имена файлов и каталогов написаны "гречкой" - проблемы с кодировкой. Я смотрю из под Windows 7 Rus
Поделиться904-04-2010 20:07:17
Проблемы с "гречкой", устранил.
Перезагрузил файлы.
Пробовал открывать архивы в Windows и Linux.
У меня всё открылось нормально.
Поделиться1007-06-2012 06:47:44
какой то русский язык .а написано всё по иностранному.ура!гитлер рад.
Поделиться1107-06-2012 06:54:19
написано -методы поля- здеся где то .а какое поле .поле это ПОЛЕ.ерунда.надо полностью писать.это всё учителя виноваты .учили пушкина а он не кумекал по русски.надо говорить -скока,ежели и так подобно .а то нет слов и идёт нецензурщина.а почему матом а не патом?.вот почта та же.надо в почте чтоб всё по полочкам было письма от писцов чтоб класть по ячейкам и оно в слою ячейку идёт уже само .и смотриш тока ячейки .а то всё в 1 кучу.