Лабы / tayak_lab
.docЗадания к лабораторным работам по дисциплине «Теория алгоритмических языков и компиляторов»
Лабораторная работа №1
Предложения языка представляют собой десятичные числа.
G=({S,D,F},{0,1,2,3,4,5,6,7,8,9,.},P,S)
Продукции множества P.
S-> D|D.D|D.
D-> F|DF
F-> 0|1|2|3|4|5|6|7|8|9
Разработать:
-
Автоматную грамматику, порождающую этот язык.
-
Детерминированный конечный автомат, допускающий данный язык.
-
Программу на языке С++ выполняющую синтаксический анализ путем моделирования работы конечного автомата. Исходные предложения находятся в файле. По каждому исходному предложению программа выдает информацию о первом ошибочном символе предложения или о его правильности.
Лабораторная работа №2
Разработать программу синтаксического анализа на языке С++ методом рекурсивного спуска. Программа должна обнаруживать в исходном предложении первую синтаксическую ошибку с точностью до ошибочного символа. Исходные предложения находятся в файле.
Язык задается грамматикой.
<S>->#define<идентификатор языка Си><строка символов С++>
|#include “<имя файла>”
|#else
|#ifdef <идентификатор>
|#ifndef<идентификатор>
Доопределите грамматику самостоятельно.
Примечание: нетерминал задается в <>.
Лабораторная работа №3
Разработать программу синтаксического анализа на языке С++ путем моделирования работы магазинного автомата. Программа должна обнаруживать в исходном предложении первую синтаксическую ошибку с точностью до ошибочного символа. Исходные предложения находятся в файле.
Язык задается грамматикой.
<S>->#define<идентификатор языка Си><строка символов С++>
|#include “<имя файла>”
|#else
|#ifdef <идентификатор>
|#ifndef<идентификатор>
Доопределите грамматику самостоятельно.
Примечание: нетерминал задается в <>.