Практическая работа №3. Лексический анализатор. 3 Лексический анализатор. Практическая работа 3. Лексический анализатор Задание на практическую работу
Скачать 19.87 Kb.
|
Практическая работа №3. Лексический анализатор Задание на практическую работу Для выполнения лабораторной работы необходимо: Написать программу, которая выполняет лексический анализ входного текста в соответствии с заданием и порождает таблицу лексем с указанием их типов. Программа должна выдавать сообщения о наличии во входном тексте ошибок, которые могут быть обнаружены на этапе лексического анализа. Можно написать собственное оконное приложение для лексического анализа, либо с помощью Flex. Второй вариант предпочтительнее. Варианты заданий Входной язык содержит арифметические выражения, разделённые символом ; (точка с запятой). Арифметические выражения состоят из идентификаторов, десятичных чисел с плавающей точкой (в обычной и экспоненциальной форме), знака присваивания (:=), знаков операций +, –, *, / и круглых скобок. Входной язык содержит логические выражения, разделённые символом ; (точка с запятой). Логические выражения состоят из идентификаторов, констант 0 и 1, знака присваивания (:=), операций or, xor, and, not и круглых скобок. Входной язык содержит операторы условия if … then … else и if … then, разделённые символом ; (точка с запятой). Операторы условия содержат идентификаторы, знаки сравнения <, >, =, шестнадцатеричные числа, знак присваивания (:=). Шестнадцатеричными числами считать последовательность цифр и символов a, b, c, d, e, f, начинающуюся с цифры (например, 89, 45ac, 0abc). Входной язык содержит операторы цикла for (…; …; …) do …, разделённые символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения <, >, =, строковые константы (последовательность символов в двойных кавычках), знак присваивания (:=). Входной язык содержит операторы цикла while (…) … done, разделённые символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения <, >, =, десятичные числа с плавающей точкой (в обычной и экспоненциальной форме), знак присваивания (:=). Входной язык содержит операторы цикла do … while (…), разделённые символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения <, >, =, римские числа, знак присваивания (:=). Римскими считать числа, записанные большими буквами X, V и I. Входной язык содержит арифметические выражения, разделённые символом ; (точка с запятой). Арифметические выражения состоят из идентификаторов, римских чисел, знака присваивания (:=), знаков операций +, –, *, / и круглых скобок. Римскими считать числа, записанные большими буквами X, V и I. Входной язык содержит логические выражения, разделённые символом ; (точка с запятой). Логические выражения состоят из идентификаторов, констант true и false, знака присваивания (:=), операций or, xor, and, not и круглых скобок. Входной язык содержит операторы условия if … then … else и if … then, разделённые символом ; (точка с запятой). Операторы условия содержат идентификаторы, знаки сравнения <, >, =, десятичные числа с плавающей точкой (в обычной и экспоненциальной форме), знак присваивания (:=). Входной язык содержит операторы цикла for (…; …; …) do …, разделённые символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения <, >, =, шестнадцатеричные числа, знак присваивания (:=). Шестнадцатеричными числами считать последовательность цифр и символов a, b, c, d, e, f, начинающуюся с цифры (например, 89, 45ac, 0abc). Входной язык содержит операторы цикла while (…) … done, разделённые символом ; (точка с запятой). Операторы условия содержат идентификаторы, знаки сравнения <, >, =, строковые константы (последовательность символов в двойных кавычках), знак присваивания (:=). Входной язык содержит операторы цикла do … while (…), разделённые символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения <=, =>, =, десятичные числа с плавающей точкой (в обычной и экспоненциальной форме), знак присваивания (:=). Входной язык содержит арифметические выражения, разделённые символом ; (точка с запятой). Арифметические выражения состоят из идентификаторов, шестнадцатеричных чисел, знака присваивания (:=), знаков операций +, –, *, / и круглых скобок. Шестнадцатеричными числами считать последовательность цифр и символов a, b, c, d, e, f, начинающуюся с цифры (например, 89, 45ac, 0abc).. Входной язык содержит логические выражения, разделённые символом ; (точка с запятой). Логические выражения состоят из идентификаторов, сим-вольных констант 'T' и 'F', знака присваивания (:=), операций or, xor, and, not и круглых скобок. Входной язык содержит операторы условия if … then … else и if … then, разделённые символом ; (точка с запятой). Операторы условия содержат идентификаторы, знаки сравнения <, >, =, римские числа, знак присваивания (:=). Римскими считать числа, записанные большими буквами X, V и I. Входной язык содержит операторы цикла for (…; …; …) do …, разделённые символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения <, >, =, десятичные числа с плавающей точкой (в обычной и экспоненциальной форме), знак присваивания (:=). Входной язык содержит операторы цикла do … while (…), разделённые символом ; (точка с запятой). Операторы условия содержат идентификаторы, знаки сравнения <=, =>, =, строковые константы (последовательность сим-волов в двойных кавычках), знак присваивания (:=). Входной язык содержит операторы цикла while (…) … done, разделённые символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения <, >, =, римские числа, знак присваивания (:=). Римскими считать числа, записанные большими буквами X, V и I. Входной язык содержит арифметические выражения, разделённые симво-лом ; (точка с запятой). Арифметические выражения состоят из идентифика-торов, символьных констант (один символ в одинарных кавычках), знака присваивания (:=), знаков операций +, –, *, / и круглых скобок. Входной язык содержит логические выражения, разделённые символом ; (точка с запятой). Логические выражения состоят из идентификаторов, шестнадцатеричных чисел, знака присваивания (:=), операций or, xor, and, not и круглых скобок. Шестнадцатеричными числами считать последова-тельность цифр и символов a, b, c, d, e, f, начинающуюся с цифры (напри- мер, 89, 45ac, 0abc). Входной язык содержит операторы цикла for (…; …; …) do …, разделённые символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения <, >, =, римские числа, знак присваивания (:=). Римскими считать числа, записанные большими буквами X, V и I. Входной язык содержит операторы цикла do … while (…), разделённые символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения <=, =>, =, шестнадцатеричные числа, знак присваивания (:=). Шестнадцатеричными числами считать последовательность цифр и символов a, b, c, d, e, f, начинающуюся с цифры (например, 89, 45ac, 0abc). Входной язык содержит операторы условия if … then … else и if … then, разделённые символом ; (точка с запятой). Операторы условия содержат идентификаторы, знаки сравнения <, >, =, строковые константы (последовательность символов в двойных кавычках), знак присваивания (:=). Входной язык содержит операторы цикла while (…) … done, разделённые символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения <, >, =, шестнадцатеричные числа, знак присваивания (:=). Шестнадцатеричными числами считать последовательность цифр и символов a, b, c, d, e, f, начинающуюся с цифры (например, 89, 45ac, 0abc). Входной язык содержит операторы цикла do … while (…), разделённые символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения <=, =>, =, десятичные числа с плавающей точкой (в обычной и экспоненциальной форме), знак присваивания (:=). Контрольные вопросы Какую роль выполняет лексический анализ в процессе компиляции? Как связаны лексический и синтаксический анализ? Какие проблемы необходимо решить при построении лексического анализатора на основе конечного автомата? Чем отличаются таблица лексем и таблица идентификаторов? В какую из этих таблиц лексический анализатор не должен помещать ключевые слова, разделители и знаки операций? |