Лексический анализ. Изучение работы и методов построения лексического анализатора.

Страницы работы

Содержание работы

Министерство образования и науки Российской Федерации

Государственное образовательное учреждение

высшего профессионального образования

«Комсомольский-на-Амуре государственный технический университет»

Кафедра математического обеспечения и применения ЭВМ

Лабораторная работа № 2

по курсу «Теория языков программирования и методы трансляции»

Студенты группы 4ВC-1                                                             Казаков М.Ю.

Неделько Н.Н.

Преподаватель                                                                             Петрова А.Н.

2007


Тема:

Лексический анализ.

Цель работы:

Изучить работу и методы построения лексического анализатора.

Задание:

Написать программу лексического анализатора для языка C.


Первый этап построения лексического анализатора

Выделим во входном языке шесть классов лексем и определим код каждого класса.

1)  10 – ключевые слова;

2)  20 – идентификаторы;

3)  30 – разделители;

4)  40 – числовые константы;

5)  50 – символьные константы;

6)  60 – строковые константы.


Второй этап построения лексического анализатора

Построим для каждого класса лексем автоматную грамматику.

1) для ключевых слов G1 = <N1, T1, P1, S1>, где

N1 = {D, L, T, S}, T1 = {A, B, …, Y, Z, a, b, …, y, z, _, 0, 1, … , 8, 9}, S1 = {S},

P1 =

{

S → L | LT

T → LT | DT | L | D

L → A | B | … | Y | Z | a | b | … | y | z | _

D → 0 | 1 | … | 8 | 9

}

2) для идентификаторов грамматика будет точно такой же, как и для ключевых слов.

3) для разделителей G2 = <N2, T2, P2, S2>, где

N2 = {S, A, I, P, M, E}, T2 = {+, -, <, >, =, !, /, *, &, |, (, ), {, }, [, ], %, ., ,, ;}, S2 = {S},

P2 =

{

S → + | +P | - | -M | < | < E| > | >E | = | =E | ! | !E | / | * | &A | |I | ( | ) | { | } | [ | ] | % |.| , | ;

A → &

I → |

P → +

M → E → =

}

4) для числовых констант G3 = <N3, T3, P3, S3>, где

N3 = {D, S, T}, T3 = {0, 1, …, 8, 9, ‘.’}, S3 = {S},

P3 =

{

S → T

T → DT | .T | D | .

D → 0 | 1 | … | 8 | 9

}

5) для символьных констант G4 = <N4, T4, P4, S4>, где

N4 = {D, S, T, L, C}, T4 = {A, B, … , y, z, _, 0, … , 9, ”, ’, \, !, #, %, ^, &, *, (, ), +, -, =, |, :, ;, ,,.} S4 = {S},

P4 =

{

S → ‘T

T → \D | LT | C

D → \C | nC | tC | ‘C | “C

L → A | … | z | _ | 0 | … | 9 | # | % | … | .

C → ‘

}

6) для строковых констант G5 = <N5, T5, P5, S5>, где

N5 = {D, S, T, L}, T5 = {A, B, … , y, z, _, 0, … , 9, ”, ’, \, !, #, $, %, ^, &, *, (, ), +, -, =, |, :, ;, ,,.}, S5 = {S},

P5 =

{

S → “T

T → \D | LT | C

D → \T | nT | tT | ‘T | “T

L → A | … | z | _ | 0 | … | 9 | # | % | … | .

C → “

}


Третий этап построения лексического анализатора

Построим для каждой грамматики диаграмму состояний.

1) для ключевых слов и идентификаторов:

 


2) для разделителей:

 


3) для числовых констант:

 


4) для символьных констант:

 


5) для строковых констант:

 



Четвертый этап построения лексического анализатора

Запрограммируем семантические подпрограммы и распознаватель.

//--------------------------------------------------------------------------#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include <string.h>

//--------------------------------------------------------------------------#pragma package(smart_init)

#pragma resource "*.dfm"

#define LETTER       10

#define SEPARATOR    30

#define DIGIT        40

#define SYMBOL       50

#define STR          60

#define SPACE        70

#define ADDITIONAL   80

#define ERROR       -1

#define END         -10

#define NEWLINE     -20

TForm1 *Form1;

//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//--------------------------------------------------------------------------char *str, buffer[100];

AnsiString des;

AnsiString msg;

int curlex, NumLine;

int countKW, countId, countSep, countSym, countStr, countDig;

char **KW, **Id=0, **Sep, **Sym, **Str, **Dig;

char *AllKeyWords[13] = {"break", "char", "continue", "else", "float", "for",

Похожие материалы

Информация о работе