[Программирование, Изучение языков] Hi Programming Language: начинаем конструировать

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
06-Окт-2020 14:31

Мы приступаем к конструированию языка программирования Hi. Здесь ввод в курс дела и некоторые ответы на вопросы, зачем это нужно. Впрочем, и без веских причин конструирование языка – это необыкновенно интересная задача, если относится к делу серьёзно.
Следуя нашему тезису максимальной доступности для обучения, постараемся логично интегрировать все основные элементы языка из широко используемых элементов других алгоритмических языков. Здесь мы следуем внутренней логике, заданной в первой статье и тому предположению, что композиция сущностей нескольких популярных языков позволит легче схватить новое содержание с меньшими усилиями, так как люди обладают встроенной интегрирующей машиной на базе нейронных сетей, которая автоматически вастнавливаят semantics parte наруш. soobщeniй.
Идея конструирования новых языков из элементов уже известных имеет давнюю историю. Более 140 лет назад доктор Заменгоф создал искусственный язык Эсперанто из составных частей других естественных языков. Язык получился настолько логичным и легким в усвоении, что оказался жизнеспособен и дожил до наших дней. Например, он есть в Google – переводчике. Saluton Habr! Bonvenon sub la kat!
Попробуем сконструировать язык, удобный для быстрого программирования интеллектуальных игр и головоломок и использование которого доставит удовольствие своей логичностью и продуманностью.
Комментарии
Для однострочного комментария используем символ # (Python, R, Ruby). Сочетание // (С и множество других языков) применим в качестве оператора деления целых чисел для получения результата операции как вещественного числа, чтобы не использовать в этом случае немного тяжеловесное выражение конверсии вида CGFloat(int), как в Swift.
PRINT “Hi world\n”
# печатает Hi world с переходом на новую строку

Для выделения многострочных комментариев используем сочетание ##.
## Это многострочный комментарий.
Интересно, почему он не используется в Python ##

Выбор символа # также удобен тем, что в будущем он будет использоваться интерпретатором Hi language для обработки мета-тегов в тексте программы, которые могут быть синтезированы из текста комментариев. Это немного похоже на работу препроцессора в С/C++, где, кстати, тоже используется символ #.
Элементарные типы данных
Hi language в basic edition использует три элементарных типа данных:
Бинарный: BOOL
Возможные операции: & (and), | (or), ~ (not)
LET true = TRUE
LET false = FALSE
PRINT true & true # печатает TRUE
PRINT true | false # печатает TRUE
PRINT ~true # печатает FALSE

Целые числа: INT
Возможные операции: +, -, *, / (целочисленное деление), % (остаток), // (деление с автоматической конверсией результата на тип REAL)
VAR i = 0
PRINT (i + 6 – 2) * 3 / 5 # печатает 2

Вещественные числа: REAL
Возможные операции: +, -, *, /
VAR pi = 3.1415926535

Строки
Строки являются составным типом, так как рассматриваются как цепочка Unicode — символов
LET the_force = “flow through you”

Одинарные кавычки для выделения строковых литералов не используем, так как знаки, особенно расположенные на стандартной клавиатуре – это ценный ресурс на будущее.
Стандартные операции над строками:
# Конкатенация
VAR language = “C”
LET statement = “ – the best language ever”
LET proposition = language + statement
language = “Python”

Пока нам нет необходимости вводить тип данных вида Character; для решения практических задач можно использовать…
# Доступ к элементу строк
LET secondSym = language[2]

Результат присваивания в том случае, когда ссылка по индексу выходит за пределы строки равен “” и не приводит к run-time error.
Константы и переменные
Как мы уже увидели в примерах выше, Hi — язык со статической типизацией для снижения вероятности ошибок использования идентификаторов и лучшего понимания их назначения. Константы LET и переменные VAR должны быть объявлены до момента первого использования объекта. Объявление типов эргономичнее делать без явного указания конкретного типа через присваивание исходных значений; в этом случае вывод типа становится очевиден.
## вместо
LET one: INT = 1 лучше использовать: ##
LET one = 1
VAR boolean = TRUE

Концепция объявления констант и переменных let и var заимствована из Swift, но в Hi возможно сделать множественное объявление с присвоением одного значения:
VAR i, j, k = 0

Стандартный ввод и вывод
Ввод данных с клавиатуры осуществляется командой INPUT:
VAR startFrom: INT
PRINT "Start from: "; INPUT startFrom

Для ввода значения типа BOOL не нужно печатать true или false. Мобильное приложение для программирования, которое мы готовим к выходу в AppStore достаточно умно, чтобы в этом случае вывести только две кнопки с бинарным выбором. Точно также будет отображаться цифровая клавиатура без точки для ввода целого числа и обычная клавиатура для ввода текстового значения.
Команда PRINT печатает строки на экране с консольным типом отображения. По умолчанию используется режим 20 строк по 40 символов. Можно выбрать режим с крупными символами 10 Х 20 или мелкими: 40 Х 80.
PRINT "Сегодня мы изучили калькулятор для Hi language"

Hi Calculator Language
Теперь у нас есть всё, чтобы в терминах языка Hi сформировать грамматику калькулятора с интерактивным вводом – выводом в форме EBNF.
1. The Syntax of HI Programming Language
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".
capital = "A" | ... | "Z".
small = "a" | ... | "z".
character = [Unicode_character].
addOperator = "+" | "-" | "|".
mulOperator = "*" | "/" | "//" | "%" | "&".
relation = "==" | "~=" | "<" | "<=" | ">" | ">=".
integer = digit {digit}.
real = digit {digit} "." {digit}.
string = """ {character} """.
number = integer | real.
letter = capital | small.
keyword = capital capital {capital}.
ident = letter {letter | digit}.
type = keyword.
factor = number | string | TRUE | FALSE | ident | "(" expression ")" | "~" factor.
term = factor {mulOperator factor}.
simpleExpression = ["-"] term {addOperator term}.
expression = simpleExpression [relation simpleExpression].
assignment = ident "=" expression.
identList = ident {"," ident}.
expList = expression {"," expression}.
constDeclaration = LET identList [":" type] "=" expression.
varDeclaration = VAR identList [":" type] ["=" expression].
funcCall = keyword [expList ].
statement = assignment | funcCall | constDeclaration | varDeclaration
statementSequence = statement {("\n" | ";") statement}.
2. Standard Data Types
BOOL INT REAL STRING
3. Standard Procedures and Functions
INPUT PRINT
4. Other Keywords
LET VAR

В отличие от грамматики множества языков, где ключевые слова входят в список исключений из более общего класса идентификаторов, мы вводим специальный вид токена – keyword, который распознается уже на уровне сканнера интерпретатора Hi language.
В следующей статье введем в язык Hi составные типы данных в дополнение к STRING. Для нашего простого языка они достаточно мощные, чтобы легко выражать идеи оперирования множествами объектов, массивами и словарями.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_programmirovanie (Программирование), #_izuchenie_jazykov (Изучение языков), #_hi_programming_language, #_hi_language, #_syntax, #_grammar, #_types, #_comments, #_programmirovanie (
Программирование
)
, #_izuchenie_jazykov (
Изучение языков
)
Профиль  ЛС 
Показать сообщения:     

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

Текущее время: 22-Ноя 23:55
Часовой пояс: UTC + 5