- •Билет 2 (Проверка открытия exe файла)
- •Клава.Асм
- •Выводит хвост командной строки
- •Породитель процесса (par.Asm)
- •Порождаемый процесс
- •Билет 3 (сканер для лексем)
- •Билет 4 (построить грамматику с возведением в степень)
- •Билет 5 (преобразование для нисходящего разбора)
- •Билет 6 (грамматика для if then else)
- •Билет 7 (представление массива и выведение формулы)
- •Билет 8 (хеш - функция)
- •Билет 9(Построить таблицу идентификаторов)
- •Билет 10 (ка для сканера лексем)
- •Билет 11(грамматика для чисел)
- •Билет 13 (матрица предшествования для грамматики)
- •Билет 14(анализ грамматики для метода предшествования)
- •Билет 16 (Заголовок exe)
- •Билет 17(Структура диска ms-dos)
- •Билет 18 (Синтаксический анализ теория) не написано Билет 19 (Лексический анализ теория)
- •Требования к грамматике нисходящего метода
- •Семантические программы. Перевод инфиксной записи в польскую.
- •Тетрады
- •Хранение грамматики с использованием сети
- •Аппаратные прерывания
- •Представление многомерных массивов в памяти эвм
- •Свободные кластеры логического диска "а" (на всякий)
Порождаемый процесс
c1 segment
assume cs:c1,ds:c1
org 100h
start:
mov ah,09h
mov dx,offset msg1
int 21h
mov ah,3dh
mov al,0
mov dx,offset fname
int 21h
jnc ok
mov errcode,1
mov ah,09h
mov dx,offset msg2
int 21h
jmp fined
ok:
mov ah,09h
mov dx,offset msg3
int 21h
fined:
mov ah,4ch
mov al,errcode
int 21h
Открытие на чтение файла
msg1 db '(chld)chield proc started',10,13,'$'
msg2 db '(chld)file not open',10,13,'$'
msg3 db '(chld)file opened.chield proc closed',10,13,'$'
fname db 'file.txt',0
errcode db 0
c1 ends
end start
code segment
assume cs:code, ds:code
;data
fname db “my.txt”,0
msg db ‘Текстовое сообщене’,13,10,’Еще сообщение’,13,10,’$’
buff db 210 dup(0)
base: mov ax, code
mov ds, ax
; Создание и открытие файла
mov ah, 3ch
mov cx, 0000h
lea dx, fname
int 21h
;В регистре AX находится файловый дескриптор
; Запись в файл
Mov bx, ax
Mov ax, 4000h
Mov cx, buff-msg
Lea dx, msg
Int 21h;
; Закрытие файла
Mov ah, 3eh
Int 21h
; Открытие файла для чтения
Mov ah, 3dh
Mov al, 2
Lea dx, fname
Mov cl, 00h
Int 21h
; Чтение из файла в буфер
Mov bx, ax
Mov ah, 3fh
Mov cx, 100 ; Потенциальная длина буфера
Lea dx, buff
Int 21h
; Запись буфера в консоль
Mov ah, 09h
Lea dx, buff
Int 21h
; Закрытие файла
Mov ah, 3eh
Int 21h
; Возврат 0 и выход в операционную систему
Mov ah, 4ch
Mov al, 0
Int 21h
Code ends
End base
Билет 3 (сканер для лексем)
Сканер для лексем /,/*,//
Недетерминированный Конечный Автомат (НКА)
S-начальное состояние
Пустая стрелка переход по другому символу
S2- однолитерный разделитель
S5- двухлитерный разделитель
S2,S5-конечные состояния
Детерминированный конечный автомат
|
/ |
* |
Др.символ |
S1 |
S13 |
- |
- |
S13 |
S4 |
S4 |
S2 |
S4 |
- |
- |
S5 |
Билет 4 (построить грамматику с возведением в степень)
Построить грамматику для алгебраического выражения с операцией возведение в степень
Грамматика для выражений со степень
1. <E>::=<E> | <E>+<T> | <E>-<T> | <T>
2. <T>::=<T>*<F> | <T>/<F> | <F>
3. <F>::=<F>^<P> | <P>
4. <P>::=<id> | (<E>)
Такая грамматика не может быть использована для простого предшествования, так как в ней есть неоднозначность отношений предшествования.
Из правила 4 , (=. E из правила 1 и 4 (<.E и т.д.
Преобразуя данную грамматику, вводя стратификацию для E,T,F, получим следующую:
1. <E>::=<E’>
2. <E’>::=<E’> | <E’>+<T> | <E’>-<T> | <T>
3. <T>::=<T’>
4. <T’>::=<T’>*<F> | <T’>/<F> | <F>
5. <F>::=<F’>
6. <F’>::=<F’>^<P> | <P>
7. <P>::=<id> | (<E>)
Далее как билете 13 строит множество левых и правых символов-матрицу.
Билет 5 (преобразование для нисходящего разбора)
Построить грамматику для операций (видимо +,-,*,/).
Преобразовать грамматику для нисходящего разбора.
Исходная грамматика для заданных операций:
1. <E>::= <E>+<T> | <E>-<T> | <T>
2. <T>::=<T>*<F> | <T>/<F> | <F>
3. <F>::=<id> | (<E>)
Так как к грамматике нисходящего разбора предъявляются следующие требования:
1. Отсутствие левосторонней рекурсии
<X>::=<X>
2. Отсутствие общей левосторонней рекурсии
X::=V…
V::=X…
Нельзя использовать итерацию и факторизацию.
E::=T|TB
B::=+T|-T|+TB|-TB
T::=F|FG
G::=*F|/F|*FG|/FG
F::=<id> | (E)
/*было
преобразуем грамматику, используя итерацию.
1. <E>::= <T> | <T> {+T| -T}
2. <T>::= <F> | <F > {*F| /F}
3. <F>::=<id> | (<E>)
Такую грамматику не удобно использовать поэтому составим следующую:
1. <E>::= <T> | <T> < E’>
2. <E’>::=+<T> | -<T> | +<T><E’> | -<T><E’>
3. <T>::=<F>| <F><T’>
4. <T’>::=*<F> | /<F> | *<F><T’> | /<F><T’>
5. F::=<id> | (<E>)
*/
Такая грамматика удовлетворяет требованиям нисходящего разбора и не нарушает порядка действий в выражении.
