Задание 1

Реализовать на языке по выбору С/С++/Java алгоритм работы стековой машины с учетом возможных ошибочных ситуаций при выполнении команд. В число обязательно учитываемых ошибок входят следующие:

· арифметическое переполнение (т.е. выход результата любой арифметической операции за диапазон принимаемых стековой машиной чисел [-9999 9999])

· ошибка адресации (обращение к данным по чтению или записи за пределами границ массива D или С)

· неверная команда

Входные данные и команды должны быть загружены из текстового файла, имеющего такой внутренний формат:

Таблица 3

CN DN C1 CN D1 .. DM

CN число команд

С1…СN команды

DM число элентов стека данных

D1…DM данные

Задание 2

Реализовать с использованием инструментального средства ANTLR на языке по выбору C/C++/java ассемблер виртуальной стековой машины. Входной текстовый файл ассемблера удовлетворяет следующей грамматике:

<инструкция>::= <число> |

add |

mult |

div |

minus |

if= |

if< |

goto |

load |

free |

store |

count |

print |

read |

stop

<входные данные>::={<число>,}*

<программа>::= DATA: <входные данные> PROGRAM: {<инструкция>,}*

Выходной текстовый файл, получаемый в результате работы ассемблера, должен содержать правильную последовательность данных и команд стековой машины в ее внутреннем формате (см. задание 1).

ЗАДАНИЕ 3

Модельный язык задается следующей грамматикой (выражение EXP?n,m означает повторение выражения EXP от n до m раз):

<программа>::= INPUT <список параметров>

FUNCTIONS <список объявлений>

OUTPUT <список выражений>

END

<список объявлений>::= <объявление> {,<объявление>}*

<список выражений>::= <выражение> {,<выражение>}*

<идентификатор>::=[a..z]?1,10

<объявление>::=<идентификатор>(<список параметров>)=<выражение>

<выражение>::= <число> |

<идентификатор> |

<идентификатор>(<список выражений>) |

-<выражение> |

(выражение) |

<выражение>[+|*|/|-]<выражение> |

if <выражение>[=|<]<выражение> then <выражение> fi

<число>::=[0..9]?1,10

Например, следующий текст является правильной программой:

INPUT a,b

FUNCTIONS div(x,y)= if x<y then 0

else div(x-y,y)+1 fi,

mod(x,y)= if x<y then x

else mod(x-y,y) fi

OUTPUT div(a,b), mod(a,b)

END

Реализовать с использованием инструментального средства ANTLR транслятор программ с описанной выше грамматикой на язык ассемблера виртуальной стековой машины (задание 2) и или на правильную последовательность данных и команд стековой машины в ее внутреннем формате (см. задание 1).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: