Skip to content

proooooogiba/Machine-independent-languages-and-compilation-basics

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Machine-independent-languages-and-compilation-basics

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

Вычислить целочисленное выражение: 2

Вычислить целочисленное выражение: 3

Дана матрица 5х4. Вычеркнуть строки с нулевой сум¬мой элементов. Организовать ввод матрицы и вывод результатов.

Дан текст не более 255 символов. Слова отделяются друг от друга пробелами. Удалить из слов гласные буквы.

Дано 8 слов по 6 символов. В начале каждого слова записан номер из двух символов. Расставить слова по возрастанию номеров.

Разработать грамматику и распознаватель описания языка программирования C++, включающего оператор цикла-пока и оператор присваивания. Считать, что условие – значение переменной логического типа, тело цикла содержит не более одного оператора, а оператор присваивания в правой части содержит только идентификаторы или целые константы. Например: while (d) while (ii) gyu=5;


Описание грамматики в форме Бэкуса–Наура:

  1. <команда> ::= <цикл> | <присваивание>
  2. <присваивание> ::= <идентификатор> <знак присваивания> <присваиваемое><;>
  3. <присваиваемое>::= <число> | <строка> | <идентификатор>
  4. <цикл> ::= <начало цикла> <открывающие скобки> <идентификатор> <закрывающие скобки> <команда>|<;>
  5. <начало цикла> ::= while,
  6. <знак присваивания> ::= =
  7. <число> ::= <знак><цифра>…<цифра>
  8. <цифра> ::= 0 |1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
  9. <символ>::= <буква>|<цифра>
  10. <строка>::= <двойная кавычка><символ>…<символ><двойная кавычка>
  11. <идентификатор> ::= <буква><символ>...<символ>
  12. <буква> ::= a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
  13. <знак> ::= + | -

Синтаксические диаграммы:

Правило построения нетерминала <команда> включает рекурсивное вложение: <цикл> в конечном счете определяется через <цикл>. Следовательно, это грамматика второго типа по Хомскому

Синтаксическая диаграмма

РК-3

32-разрядная

Порядок регистров: ebx, ecx, edx, esi, edi, ebp

Результат функции:

  • если строка - передаётся указатель на строку в ebx
  • если не строка - передаётся прямое значение в eax

64-разрядная

Порядок регистров: rdi, rsi, rdx, r10, r8, r9

Результат функции:

  • если строка - передаётся указатель на строку в rdi
  • если не строка - передаётся прямое значение в rax

Правила леса

  • Если переменная задаётся с помощью var в регистр она передается через указатель(не зависит от типа переменной).
  • Если переменная передаётся с использованием * или & она передаётся через указатель.
  • Char не строка или её вид, поэтому он передаётся как допустим переменная integer (работает и в случае если char это тип результата функции).
  • Всё строки и их виды всегда передаются через указатели независимо от языка.

About

Labs and homeworks for course 'Machine independent languages and compilation basics'

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published