Code Monkey home page Code Monkey logo

1_sem's Introduction

MIPT_HOMEWORK

GitHub repo size GitHub last commit GitHub lines

Этот репозиторий содежит задания из моего первого семестра обучения на ФРКТ. Далее следует краткий обзор некоторых задач.

Язык

Си - подобный язык, основные ключевые слова которого можно менять с помощью файла lang.h.
В языке используются следующие ключевые слова (текущая конфигурация - "непонятный язык"):

  • fi -> if
  • esel -> else
  • hewli -> while
  • rterun -> return
  • gte -> get(val) считывание числа в переменную
  • tup -> put(val) вывод аргумента на экран
  • mani -> main главная функция программы
  • arv -> var объявление переменной
  • rived -> deriv(expression, variable) дифференцирование expression по переменной variable

Данный проект включает в себя 4 программы:

  • Frontend - перевод из текстового файла в синтаксическое дерево.
  • Frontend^-1 - перевод из синтаксического дерева в текстовый файл.
  • Middle-end - упрощение выражений и взятие производных в синтаксическом дереве.
  • Backend - перевод из синтаксического дерева в собственный ассемблер adasm.

Разберём подробнее каждый этап.

Frontend

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

$fact( number )
{
  fi (number <= 1)
    rterun 1;
  rterun number * fact(number - 1);
}

$main()
{
 arv number = 228;
  gte(number);

 tup(fact(number));
 rterun;
}

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

Frontend^-1

На вход программа получает файл, в котором описано синтаксическое дерево. Программа восстанавливает дерево из файла, а затем пишет исходный код программы, основываясь на этом дереве.

Middle-end

На вход программа получает файл, в котором описано синтаксическое дерево. Программа восстанавливает дерево из файла, а затем ищет узлы с выражениями (expression), либо с оператором взятия производной (rived) и производит вычисления.

Back-end

На вход программа получает файл, в котором описано синтаксическое дерево. Программа восстанавливает дерево из файла, после чего пишет код на ассемблере adasm, сохраняя его в текстовый файл.

1_sem's People

Contributors

derzhavin3016 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.