Ремесло программиста

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

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


Вы здесь » Ремесло программиста » Валентина » Проект краткого синтаксиса


Проект краткого синтаксиса

Сообщений 31 страница 52 из 52

31

Вообще-то критерием выбора является не открытость или закрытость, а её качественные показатели защищенности.

Так это и есть качественный показатель защищенности - компроментация алгоритма не должна влиять на его стойкость. Но мы сильно уехали в сторону.

32

Доброго всем дня!
Ув. тов. Уткин! Я ещё со времён первой Валентины слежу за происходящим. А где сейчас можно скачать Ваш транслятор? Первая версия была реально рабочим вариантом. У меня где-то даже лежала вторая, но некомпиленная, в виде исходников. А как сейчас с этим дела обстоят?

33

Сейчас делается вторая вторая Валентина :). Она очень сильно отличается от того что было раньше (и от В-1 и от второго проекта и внутри устроена тоже по-другому). Почитайте неполное описание языка. Текущая стадия - это сборка интерпретатора. У меня нет времени долго находится за компом - оффлайновые причины, это сильно тормозит процесс. В этом разделе много тем, Вам нужно перейти в тему Описание языка, там есть прикрепленный вордовский документ. Читайте последнюю версию. Остальные темы касаются обсуждения того, каким должен быть язык и его реализация.

34

А вот ещё короче...

Система: <имя_системы>
Нужно:  <имя_системы>[, <имя_системы>].....
Допуск: <имя_функции>
Пуск: <имя_функции>
Стяги: <Идентификатор_на_национальном_языке>:=<Идентификатор_на_русском_языке>;...

"Допуск" - это своеобразный "фейсконтроль"...
"Стяг" - это не только "флаг, гимн", но и любой другой ид... (алиас, ник, аватар, погонялово)))

35

Допуск не очевидно. Стяги тоже не очевидно, придется специально людям подробно объяснять что это такое.

36

Вопрос по секции интернационализации остался открытым. Сейчас максимум что может сделать интерпретатор это просто проверить, что эта секция вообще в принципе есть и что в ней располагается набор пар ключ=значение. Какой будет ключ и какое значение интерпретатор никак проконтролировать не может (ибо дорого по времени все определения там ковырять). Там вообще можно написать все что заблагорассудится и потому вся эта реакция по типу русские там или английские приведения ключевых терминов просто теряют смысл.

37

Для того, чтобы править (to rule), надо создавать правила (rules). Поэтому видится разумным добавить в проверку пар ключ-значение
правило о том, что ключ может быть записан только кириллицей.

Отредактировано ВежливыйЛис (2017-10-23 14:07:13)

38

Поэтому видится разумным добавить в проверку пар ключ-значение
правило о том, что ключ может быть записан только кириллицей.

Вы предлагаете шерстить Юникод на русские буковы? Я сейчас как раз на разборе данной секции. Просто можно отложить, но как обычно, то что делается на "потом" обычно остается навсегда :). Я примерно представляю алгоритм, но он не самый элегантный...

39

utkin написал(а):

Вы предлагаете шерстить Юникод на русские буковы?

там всего 5 диапазонов:
https://ru.wikipedia.org/wiki/Кириллица_в_Юникоде

несложная проверка (не сложнее того, чтобы проверять буквы/цифры или буквы/знаки препинания)

Отредактировано ВежливыйЛис (2017-10-23 14:58:29)

40

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

41

По просьбам трудящихся:
http://s9.uploads.ru/t/IpDt3.png
Шаблон для проверки: 0123456789!@#$%^&_~?АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЪЬЫЭЮЯ
Всякие церковнославянские символы по-моему излишество.

Разбор в данной секции проводится поэтапно - сначала синтаксическая проверка (это то что сделано сейчас), потом уже семантика и реальное исполнение. Сделано это для того, чтобы в окошке сообщений накапливать кучу ошибок по секции. Иначе юзер устанет искать по одной ошибке. Сведения сформированы в некую табличку. Теперь она будет применена к создаваемой системе, в частности будет осуществлена рекурсия и разбор подключаемых модулей.
В ходе работы выяснилось, что я постоянно забываю двоеточия для опций, поэтому в синтаксисе можно писать как с двоеточиями, так и без них. Реально бесит :).
Файл синтаксиса:

Проект краткого синтаксиса
Name=Краткий синтаксис для языка программирования Валентина
Remark=Синтаксис для написания программ

// Обязательные элементы
Constr
Remark=Незначащая лексема
Id=0
Word1=Затем Далее Следовательно
Word2=,

Constr
Remark=Комментарий
Id=1
Word1=1
Word2=// #
Word3=2

Constr
Remark=Комментарий
Id=1
Word1=// #
Word2=1
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Раздел для пользовательских определений

// Секция настроек системы

Constr
Remark=Описание системы
Id=2
Word1=Система
Word2=:
Word3=1

Constr
Remark=Описание системы (краткая форма)
Id=2
Word1=Система
Word2=1

Constr
Remark=Указание внешних модулей
Id=3
Word1=Нужно
Word2=1

Constr
Remark=Указание внешних модулей
Id=3
Word1=Нужно
Word2=:
Word3=1

Constr
Remark=Точка старта системы как самостоятельного компонента
Id=4
Word1=Пуск
Word2=1

Constr
Remark=Точка старта системы как самостоятельного компонента
Id=4
Word1=Пуск
Word2=:
Word3=1

Constr
Remark=Конструктор системы
Id=5
Word1=Создание
Word2=1

Constr
Remark=Конструктор системы
Id=5
Word1=Создание
Word2=:
Word3=1

Constr
Remark=Секция интернационализации
Id=6
Word1=Псевдонимы
Word2=:
Word3=1

Constr
Remark=Секция интернационализации
Id=6
Word1=Псевдонимы
Word2=1
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Описание встроенных функций
FUNCT
Name=Синус
Remark=Вычисление синуса, один параметр в радианах
Params=1

Здесь описываются лексемы которые должны быть выделены в тексте
general
token=: ,

Там в конце поясняловка еще, не стал писать.

42

utkin написал(а):

По просьбам трудящихся:
    // Описание встроенных функций
    FUNCT
    Name=Синус
    Remark=Вычисление синуса, один параметр в радианах
    Params=1

Трудящиеся счастливы, но спрашивают - а что это за буквы такие в слове Remark - e, a, k понятно, т почему-то прописью, а остальные непонятные - это греческий или деванагари?

43

Это кусок теста, он нужен для отладки. Периодически добавляю и убираю его :). Можно забить, до встроенных функций еще как до Китая пешком.
Где в слове Ремарк буква т? Или это подкол на тему того, что там конфигурация смешанная с нерусскими буквами :)?

44

Потакая нацоналистическим наклонностям Вежливого Лиса, добавил дополнительно в парсер разбор правил и в русском языке:

Проект краткого синтаксиса
Имя=Краткий синтаксис для языка программирования Валентина
Описание=Синтаксис для написания программ

// Обязательные элементы
Шаблон
Описание=Незначащая лексема
№=0
Слово1=Затем Далее Следовательно
Слово2=,

Шаблон
Описание=Комментарий
№=1
Слово1=1
Слово2=// #
Слово3=2

Шаблон
Описание=Комментарий
№=1
Слово1=// #
Слово2=1
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Раздел для пользовательских определений

// Секция настроек системы

Шаблон
Описание=Описание системы
№=2
Слово1=Система
Слово2=:
Слово3=1

Шаблон
Описание=Описание системы (краткая форма)
№=2
Слово1=Система
Слово2=1

Шаблон
Описание=Указание внешних модулей
№=3
Слово1=Нужно
Слово2=1

Шаблон
Описание=Указание внешних модулей
№=3
Слово1=Нужно
Слово2=:
Слово3=1

Шаблон
Описание=Точка старта системы как самостоятельного компонента
№=4
Слово1=Пуск
Слово2=1

Шаблон
Описание=Точка старта системы как самостоятельного компонента
№=4
Слово1=Пуск
Слово2=:
Слово3=1

Шаблон
Описание=Конструктор системы
№=5
Слово1=Создание
Слово2=1

Шаблон
Описание=Конструктор системы
№=5
Слово1=Создание
Слово2=:
Слово3=1

Шаблон
Описание=Секция интернационализации
№=6
Слово1=Псевдонимы
Слово2=:
Слово3=1

Шаблон
Описание=Секция интернационализации
№=6
Слово1=Псевдонимы
Слово2=1
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Описание встроенных функций
Функция
Имя=Синус
Описание=Вычисление синуса, один параметр в радианах
Параметры=1

Здесь описываются лексемы которые должны быть выделены в тексте
Общие
Токен=: ,

Старые обозначения на буржуйском действуют также.

45

Итак, первая секция закончена. Теперь требуется краткое и продуманное описание для конструкций следующей секции:

Структура
Открытая часть
    Список_и/или_описания_систем
    Список_функций
    Значение
Закрытая часть
    Список_и/или_описания_систем
    Список_функций
    Значение

Какие есть варианты для замены конструкций Структура, Открытая часть (аналог public в паскале), Закрытая часть (аналог private в паскале)? Цель миссии и задачи те же - сделать максимально понятно и максимально кратко, что бы юзер меньше долбил пальцами по клаве и желательно не переключая раскладку клавиатуры.

46

Я вроде писал что атоибуты должны писаться прилогательными

Общественные:
Личные:

47

Да это не плохо, но может Общественные лучше заменить на Общие? Просто короче и у нас получается большое количество двоеточий (он требует нажатия шифта), не то чтобы прямо вот нельзя так, но нежелательно.

48

utkin написал(а):

может Общественные лучше заменить на Общие?

Логично.

49

Итак, предлагаю такой вариант:

Структура
Общие
    Список_и/или_описания_систем
    Список_функций
    Значение
Личные
    Список_и/или_описания_систем
    Список_функций
    Значение

При этом разрешить использовать варианты для Общие и Личные как с двоеточием так и без (предыдущий опыт показал, что они постоянно забываются к написанию).
Дальше, касательно описания самих систем, предлагается такой вариант:

Общие
    Х=5
    Контакты это spisok.Список
    Добавить_контакт это функция
    Значение='Привет мир!'
    Организация
    (Название='',
     ИНН=0, КПП=0,
     ОГРН это Деньги.данные_по_ОГРН)

Здесь первое обозначение это система Х с инициализированным значением, равным 5. По сути вырожденная система, аналог обычных переменных. Думаю, что через запятую позволительно упоминать несколько таких объявлений.
  - Контакт здесь описание системы, тягаемой из внешнего модуля.
  - Добавить_контакт здесь идет объявление функции.
  - Значение это поле системы, просто строка (именно оно инициализировалось у Х).
  - Организация здесь аналог record (или struct в с++) - создается система Организация с перечисленными подсистемами (название, ИНН, КПП и ОГРН, последнее тягается из внешнего модуля Деньги).
Что мне самому не очень нравится - если Добавить_контакт будет иметь параметры, то описание будет очень сильно напоминать описание системы Организация и может появиться путаница.

50

Возможно записи типа приведенного в примере для Организация следует маркировать дополнительно, например:

Организация+
     (Название='',
     ИНН=0, КПП=0,
     ОГРН это Деньги.данные_по_ОГРН)

Не знаю, будет ли это понятно на общем фоне программы, не потеряются ли записи в описании в куче других систем.... Еще как вариант, можно заставить программиста всегда объявлять функции в одну строку, а описание записей сделать всегда многострочными. Тогда такие записи будут выглядеть как описание функций, сразу же в объявлении :).

Чуть не забыл еще такой вопрос - а вообще секция эта должна быть обязательной? Просто третья секция с описанием самих функций будет бессмысленна без второй. И тогда встает вопрос - вообще можно и нужно ли объявлять просто пустые никчемные системы? У программиста предполагается встроенная функция которая будет добавлять просто пустую систему в качестве подсистемы к любой доступной системе. Я считаю, что вторая секция должна быть обязательной и нет смысла хранить и создавать такие пустые системы. И тогда наше описание стоит добавить еще одним определением:

Общие
    Х=5
    Контакты это spisok.Список
    Добавить_контакт это функция
    Значение='Привет мир!'
    Организация
    (Название='',
     ИНН=0, КПП=0,
     ОГРН это Деньги.данные_по_ОГРН)
    Пустая_система

Здесь Пустая_система это все равно что объявить Пустая_система=''

51

Алгоритм разбора второй секции требует наличие маркера конца. В данном случае он же и маркер начала третьей секции (там где идут описания функций). В общем виде он был обозначен как Реализация функций. Предлагаю по старой традиции сократить до двух вариантов:
- Реализация
- Реализация:
То есть с двоеточием и без :).

52

Анализ показывает, что для корректного распознавания требуется уже сейчас уточнить синтаксис описания вложенных систем

Организация
    (Название='',
     ИНН=0, КПП=0,
     ОГРН это Деньги.данные_по_ОГРН)

Мне нужны варианты синтаксиса для дальнейшей работы. Предложите уже что-нибудь. Я склоняюсь к тому, что после имени такой системы должен стоять маркер, указывающий что эта система имеет вложения. Как вариант, то что уже писал выше - использовать знак +.


Вы здесь » Ремесло программиста » Валентина » Проект краткого синтаксиса