Лексический и синтаксический анализатор языка высокого уровня
Рассмотрен синтаксис заданного языка программирования, разработана грамматика регулярных множеств. Спроектированы автоматы для лексического анализа и распознавания лексем. Разработана формальная LL(1) грамматика для заданного языка программирования, спроектирован автомат с магазинной памятью для нисходящего анализа программы. Написана программа на языке высокого уровня Microsoft Visual C++ для лексического и синтаксического анализа текста на учебном языке программирования.
Содержание Введение 1 Синтез лексического анализатора (сканера) 1.1 Описание синтаксиса формального языка программирования 1.2 Система регулярных выражений 1.3 Распознаватели констант и служебных слов 1.4 Управляющая таблица конечного автомата лексического анализа 2 Синтез синтаксического анализатора 2.1 Описание формальной грамматики 2.2 Построение множества ВЫБОР(n) 2.3 Построение управляющей таблицы 3 Описание программы 4 Результаты тестирования 5 Руководство пользователя Заключение Список используемой литературы Приложение А. Листинг лексического анализатора Приложение Б. Листинг синтаксического анализатора Введение Целью данного проекта является: практическое применение теории формальных грамматик и теории автоматов для проектирования трансляторов. Задачи: написать транслирующую грамматику для учебного языка программирования; спроектировать и построить лексический анализатор; спроектировать и построить синтаксический анализатор. Входной информацией является файл, содержащий текст программы, написанной на учебном языке. Выходной информацией являются таблицы лексем и имен, а также подтверждение того, что код соответствует синтаксису. Результатом курсового проекта должна быть программа-анализатор, состоящая из двух частей: лексического анализатора, разбивающего исходный текст программы на лексемы и заполняющего таблицу имен; синтаксического анализатора, проверяющего соответствие текста заданной грамматике.
1 Синтез лексического анализатора (сканера) 1.1 Описание синтаксиса формального языка программирования Директива using позволяет в текущем пространстве имен использовать типы данных, определенные в другом пространстве имен. Синтаксис: using System.Text; В данном случае лексема using является ключевым словом. С помощью ключевого слова class определяются классы. Например: public class TestClass { // Определение полей и методов класса } Ключевое слово public определяет уровень доступности класса. Поля класса определяются как переменные: public class TestClass { public uint a, b = 35, i; public bool c, d; public const long int e = 9L; } Для каждого поля прописывается модификатор доступа (public) и тип поля (double, int или decimal). Методы класса определяются так же, как и обычные функции: public class TestClass { public int Main(Param1, Param2) { } } Как и для полей класса, для методов задается модификатор доступа и тип возвращаемого значения метода. Тело метода класса согласно учебному языку может содержать: –определение цикла со счетчиком: for (; ; ) { } –вызовы процедур: write (); read (); –операторы присваивания: a = ; d *= ; f /= ; –арифметические выражения, содержащие бинарные операции: a = b - (c + d); Так же в тексте программы могут содержаться многострочные комментарии: /* многострочный комментарий */ Для записи идентификаторов используются буквы английского языка и цифры. Идентификаторы начинаются с буквы. Целые константы записываются арабскими цифрами. 1.2 Система регулярных выражений Для записи грамматики лексем языка применим форму Бэкуса-Наура. Для записи идентификаторов используются буквы английского языка и цифры. Идентификаторы начинаются с буквы. Синтаксис идентификаторов определяется праволинейной регулярной грамматикой:
-> L ( 1) -> L ( 2) -> D ( 3) -> е( 4) где L - буква множества (A..Z), D - цифра множества (0..9), е - пустая цепочка или символ окончания лексемы. Целые константы записываются арабскими цифрами. Праволинейная грамматика целого числа: → +|- → н → н|е 1.3 Распознаватели констант и служебных слов Заданная грамматика может бать реализована автоматом со следующими состояниями: S - состояние ожидания первого символа лексемы; I - состояние ожидания символов идентификаторов: буквы, цифры; С - состояние ожидания символов целой части числа; E -состояние ошибки; R - состояние допуска лексемы. Автомат переходит в допустимое состояние R из состояния I для идентификаторов и из состояния C для чисел. Регулярная грамматика для заданных условий записи лексем задается следующими множествами: Р: [P1, P2, … ,P4] – множество правил; G: [S, I, C, E, R] – множество состояний, где S – начальный символ; [0..9, A..Z, «–», «#», «(», «)», «*», «,», «.», «/», «:», «;», «{«, «}», «+», «=»] – множество входных символов, из них разделительные символы и уникальные лексемы [«–», «#», «(», «)», «*», «,», «/», «:», «;», «{«, «}», «+», «=»]. Символы пробел и табуляции означают конец лексемы. Эти символы не является лексемой и требуют выполнения операции «СДВИГ» над входной строкой. По символу пробел автомат допускает лексему и переходит в начальное состояние анализа следующего символа входной строки автомата. Символы: «–», «#», «(», «)», «*», «,», «/», «:», «;», «{«, «}», «+», «=» являются одновременно разделительными знаками и началом следующей лексемы, даже если перед ними нет символа конца лексемы. Операция «СДВИГ» после этих символов не требуется, автомат допускает лексему и переходит в начальное состояние для анализа этих же символов.
Курсовые работы по информатикеРассмотрен синтаксис заданного языка программирования, разработана грамматика регулярных множеств. Спроектированы автоматы для лексического анализа и
Оценок: 768 (Средняя 5 из 5)
Специалисты RetsCorp работают в digital-сфере более 7 лет. За это время мы разработали более 500+ успешных проектов. Основываясь на своем опыте и знании рынка, мы с уверенностью можем сказать, что будет работать, а что — нет. Заказывая создание лендинга для бизнеса в нашей студии, вы получаете работающие решения, необходимые именно вашему бизнесу.
Сотрудничая с нами, вы будете не клиентом, а нашим партнером. Благодаря этому мы будем развивать ваш бизнес как собственный. Мы так же как и вы заинтересованы в успехе проекта, поскольку ваша успешность будет нашей рекламой.