Skip to content

Latest commit

 

History

16 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Домашнее задание 3 по конфигурационному управлению

Лысаков Ярослав, ИКБО-50-23

Этапы запуска проекта репозитория

  1. Загрузить репозиторий на компьютер. 'git clone https://github.com/YarLys/LanguageParser'
  2. Перейти в директорию проекта: 'cd LanguageParser'
  3. Выполнить инициализирующий скрипт: 'bash script.sh'. Также можно воспользоваться командой 'pip install lark'.
  4. Запустить программу командой: 'python main.py'.
  5. Ввести код исходной программы согласно заданию.
  6. Завершить ввод нажатием сочетания клавиш 'Ctrl + Z'.

Описание задания

Разработать инструмент командной строки для учебного конфигурационного языка, синтаксис которого приведен далее. Этот инструмент преобразует текст из входного формата в выходной. Синтаксические ошибки выявляются с выдачей сообщений. Входной текст на учебном конфигурационном языке принимается из стандартного ввода. Выходной текст на языке json попадает в стандартный вывод.

Синтаксис учебного конфигурационного языка

Однострочные комментарии:

REM Это однострочный комментарий

Многострочные комментарии:

<# Это многострочный комментарий #>

Словари:

table([ имя = значение, имя = значение, имя = значение, ... ])

Имена:

[_a-zA-Z]+

Значения:

• Числа. • Строки. • Словари.

Строки:

"Это строка"

Объявление константы на этапе трансляции:

имя: значение;

Вычисление константного выражения на этапе трансляции (префиксная форма), пример:

$(+ имя 1) Результатом вычисления константного выражения является значение.

Для константных вычислений определены операции и функции:

  1. Сложение.
  2. Вычитание.
  3. Умножение.
  4. max().

Реализованные функции

class Tree():

Содержит функции по каждой возможности языка. Нужен для разбора дерева лексем.

def execute():

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

def parse():

Формирование дерева лексем, его разбор, формирование выходного текста в JSON-формате.

def main():

Ввод кода на учебном конфигурационном языке и вывод результата после преобразования.

Примеры работы программы

Пример 1

Код, поступающий на вход программы:

REM Это пример с нахождением максимума 
a: 40;
b: 20;
c: max(a, b);

Результат работы программы:

{
  "a": 40,
  "b": 20,
  "c": 40
}

Пример 2

Код, поступающий на вход программы:

REM Это пример со словарями 
  slovar([
      privet = "hello",
      num = 100,
      dict_inside([
          mir = "world",
          test = 123
      ])
  ])

Результат работы программы:

{
  "slovar": [
      {
          "privet": "hello"
      },
      {
          "num": 100
      },
      {
          "dict_inside": [
              {
                  "mir": "world"
              },
              {
                  "test": 123
              }
          ]
      }
  ]
}

Пример 3

Код, поступающий на вход программы:

first_const: "hello world";
second: 500;
third: "bye bye";

Результат работы программы:

{
  "first_const": "hello world",
  "second": 500,
  "third": "bye bye"
}

Результаты тестирования

image image image image image image image image image

About

A program which translates your code from config language into JSON format

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages