https://github.com/dmitrii-artuhov/vk-kphp-project-2022
Test project for VK 2022 KPHP team internship
https://github.com/dmitrii-artuhov/vk-kphp-project-2022
Last synced: 7 months ago
JSON representation
Test project for VK 2022 KPHP team internship
- Host: GitHub
- URL: https://github.com/dmitrii-artuhov/vk-kphp-project-2022
- Owner: dmitrii-artuhov
- Created: 2022-04-04T19:14:01.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2022-04-04T19:21:01.000Z (over 3 years ago)
- Last Synced: 2025-01-20T13:45:05.038Z (9 months ago)
- Size: 6.84 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# VK KPHP
Есть некоторый новый язык С+-, он состоит из переменных, констант, литералов (строковых и числовых), функции вывода "print" , функции ввода "input".
В языке используется неявная динамическая типизация: переменные могут хранить значения разных типов. Всего есть 3 основных типа:
- `Int` (8 байт)
- `String`
- `Float` (8 байт)Также язык поддерживает арифметические операторы `+` и `-` и оператор присваивания `=`.
Все доступные типы могут стоять по обе стороны от арифметических действий. При этом правила конвертации следующие (порядок аргументов не важен):
- `String` + `Int/Float` → число преобразуется в строку.
- `String` - `Int/Float` → строка преобразуется в целое или дробное число, а если строка не является числовой (2) то будто бы она "0".
- `Float` (+, -) `Int` → целое число преобразуется в дробное.В качестве входных данных — только один файл, в котором пишется весь код. Разделения на функции нет. Пример кода:
```js
var str = "Hello"; // переменная задаётся через var
str = str + "!"; // переменные можно изменять
print(str); // функция print принимает один параметр
``````js
str = 21 + 2 + 18; // можно записать в ту же переменную число
print(str); // -> 42
``````js
val worldString = "World"; // константа задёется через val
val answerNumber = 42;
``````js
print(worldString + answerNumber); // -> World42
print(worldString - answerNumber); // -> -42
val pi = 3.14;
print(pi + answerNumber); // -> 45.14
``````js
val numberString = "134";
print(numberString - answerNumber); // -> 92
print(numberString + answerNumber); // -> 13442
``````js
val name = input("Name: "); // выводит "Name: " и ждёт ввода
print("Your name is " + name);
```## Необходимо:
- Написать парсер любым удобным способом (генераторы или вручную)
- Написать проверку того, что константы не перезаписываются
- Написать проверку того, что используемые переменные существуют
- Сгенерировать код на С++ для полученного после парсинга AST
- Написать на С++ рантайм, который будет управлять всеми операциями ввода, вывода, сложения, умножения и т.д.
- Скомпилировать полученный С++ вместе с рантаймом в готовый бинарный файл## Примечания:
- Пишем на языке C++.
- Обратите внимание, что вы не должны пытаться вывести типы для переменных и сделать всё статически типизированным: вам нужно написать некоторый тип Mixed, который умеет хранить числа/строки и умеет в операции с другим Mixed .
- Числовой строкой является строка, состоящая только из цифр и одной опциональной точки.В итоге вы должны получить программу, которая на вход принимает файл с кодом, а на выходе даёт готовый бинарный файл.
В качестве ответа пришлие ссылку на git-репозиторий с выполненным заданием.