Министерство образования и науки РФ
Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
«Комсомольский-на-Амуре Государственный Технический Университет»
Факультет компьютерных технологий
Кафедра МОП ЭВМ
по курсу «ТЯПиМТ»
Выполнил: Клименко В. А.
Зимин А.В.
Проверил: Петрова А. Н.
Комсомольск-на-Амуре
2007
Тема: Регулярные языки, конечные автоматы и лексический анализ.
Цель работы: Изучить теорию конечных распознавателей и приобрести навыки и умения использования теории при разработке средств лексического анализа языка.
Задание: Разработать программу - лексический анализатор языка программирования PHP.
Конечные автоматы
Конечный автомат для чисел:
«ц» - цифра от 0 до 9
«+/-» - знак плюс либо минус
«e» - символы е или Е
«•» - точка
«ск» - символ конца числа (оператор или разделитель): ";", ")", "]", "!", "=", "+", "-", "*", "/",
"%", "<", ">", "&", "^", "\n", "\t", "\0", " ".
Конечный автомат для идентификаторов:
«б, _» - буква либо нижнее подчеркивание
«б, ц, _» - буква, цифра либо нижнее подчеркивание
«не б, ц, _» - символы кроме букв, цифр и знака нижнее подчеркивание (операторы, разделители).
Конечный автомат для комментариев:
«лс» - любой символ
Текст программы
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
#include <stdio.h>
#include <iostream.h>
#include <ctype.h>
#include <string.h>
char *Fstr;
char *Fstr_out;
AnsiString MyFName="", MyFName_out;
bool StrNow=0;
bool StrNow2=0;
bool point=0;
bool Num=0;
int curpos=0;
char Strings[500][1000];
char strings[500][1000];
int str_num=0;
char Operators[52][4]={
",", ";", "\"", "'", "(", ")", "[", "]", "|", "~", "#", "{", "}", "!", "=", "+", "-", "*", "/", "%", "<", ">", "&", "^", ".", "?", ":", "<=", ">=", "==", "!=", "<<", ">>", " &&", "||", "<?", "?>", "++", "--", "+=", "-=", "->", "*=","/=", "&=", "%=", "^=", "=>", "===", "!==", ">>=", "<<="};
char KeyWordMass[91][20]={
"and", "array", "as", "bool", "break", "case", "cfunction", "class", "const ", "continue", "declare", "default", "die", "do", "double", "E_ALL", "echo", " E_ERROR", "else", "elseif", "empty", "enddeclare", "endfor", "endforeach", "endif", "endswitch", "E_PARSE", "eval", "E_WARNING", "exit", "extends", " FALSE","float", "for", "foreach", "function", "global","if", "include", "include_once","int", "isset", "list", "new", "not", " NULL", "old_function", "or", "parent", "php", "PHP_OS", "PHP_SELF", "PHP_VERSION", "print", "REMOTE_ADDR", "HTTP_USER_AGENT", "require", "require_once", "return", "sizeoff", "static", "stdClass", "switch", "TRUE", "unset", "use", "var", "virtual", "while", "xor", "__CLASS__", "__FILE__", "__FUNCTION__","__LINE__", "__sleep", "__wakeup", "$argc", "$argv","$_COOKIE", "$_ENV", "$_FILES", "$HTTP_COOKIES_VARS", "$HTTP_ENV_VARS", "$HTTP_GET_VARS", " $HTTP_POST_FILES","$HTTP_POST_VARS", "$HTTP_SERVER_VARS", "$_GET", "$_POST", "$_SERVER", "$this"
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.