Русский
Русский
English
Статистика
Реклама

Hi Programming Language начинаем конструировать

Мы приступаем к конструированию языка программирования 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
К списку статей
Опубликовано: 06.10.2020 12:23:44
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Программирование

Изучение языков

Hi programming language

Hi language

Syntax

Grammar

Types

Comments

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru