Разработка лексического анализатора — КиберПедия 

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Разработка лексического анализатора

2020-04-01 90
Разработка лексического анализатора 0.00 из 5.00 0 оценок
Заказать работу

Алфавит языка

Большие и малые буквы английского алфавита: a..z, A..Z

Цифры: 0,1,2,3,4,5,6,7,8,9.

Другие символы: ‘<’, ‘>’, ‘:’, ‘, ’, ‘’’, ‘;’, ‘{», ‘}’, ‘(», ‘)’

Классы лексем

- зарезервированные слова;

- знаки операций и разделители;

- литералы;

- идентификаторы

Лексика языков

1. Класс идентификаторы: к этому классу относятся все наборы цепочек, кроме зарезервированных слов

2. Класс зарезервированных слов:

2.1 Для C#

using, class, int, float, char, public, protected, private, return, namespace

2.2 Для Java

using, class, int, float, char, public, protected, private, return

3. Класс знаков операций и разделителей:

() {}:  ;   =  ->.  ,   ‘   *

4. Класс литералов:

Литерал – целочисленная или текстовая константа.

 

Структура таблицы идентификаторов

имя номер в классе тип
     

Структура таблицы литералов

имя тип
   

Разработка синтаксического анализатора

Грамматика языков

В данном проекте исследуется лишь малая часть возможностей и особенностей вышеуказанных языков. В связи с этим спроектированные грамматики для этих языков будут включать лишь те структуры языка, которые нам необходимы

Грамматика С#

1 <программа>:= 2 <предпроцессор> 3 namespace 4 {5 <операторы> 6}

7 <предпроцессор>:= 9 using 10 <предпроцессор>

8 <предпроцессор>:= 11 е

12 <операторы>:= 16 <класс> 17 <операторы>

13 <операторы>:= 18 идентификатор 19 <продолжение1>

20 <операторы>

14 <операторы>:= 21 е

15 <операторы>:= 22 <декларация> 23 <операторы>

24 <класс>:= 25 class 26 идентификатор 27 <наследование> 28 {29 <операторы> 30} 31;

32<наследование>:= 34: 35 идентификатор

33<наследование>:= 36е

37<продолжение1>:= 40. 41 идентификатор 42 <продолжение2> 43;

38<продолжение1>:= 44 <продолжение2> 45;

39<продолжение1>:= 46;

47 <продолжение2>:= 49 (50)

48 <продолжение2>:= 80 е

51 <декларация>:= 52 <тип> 53 идентификатор 55 <продолжение3>

56<продолжение3>:= 58 (59) 60 (61 <операторы> 62 return 63 литерал 64; 81)

57<продолжение3>:= 65<продолжение4>

66 <продолжение4>:= 68, 69 идентификатор 70 <продолжение4>

67 <продолжение4>:= 71;

72 <тип>:= 76 int

73 <тип>:= 77 float

74 <тип>:= 78 char

75 <тип>:= 79 идентификатор

Грамматика java

1 <программа>:= 2 <предпроцессор> 3 <операторы>

7 <предпроцессор>:= 9 using 10 <предпроцессор>

8 <предпроцессор>:= 11 е

12 <операторы>:= 16 <класс> 17 <операторы>

13 <операторы>:= 18 идентификатор 19 <продолжение1>

20 <операторы>

14 <операторы>:= 21 е

15 <операторы>:= 22 <декларация> 23 <операторы>

24 <класс>:= 25 class 26 идентификатор 27 <наследование> 28 {29 <операторы> 30} 31;

32<наследование>:= 34: 35 идентификатор

33<наследование>:= 36е

37<продолжение1>:= 40 -> 41 идентификатор 42 <продолжение2> 43;

38<продолжение1>:= 44 <продолжение2> 45;

39<продолжение1>:= 46;

47 <продолжение2>:= 49 (50)

48 <продолжение2>:= 80 е

51 <декларация>:= 52 <тип> 53 <ссылка> 54 идентификатор 55 <продолжение3>

56<продолжение3>:= 58 (59) 60 (61 <операторы> 62 return 63 литерал 64; 81)

57<продолжение3>:= 65<продолжение4>

66 <продолжение4>:= 68, 69 идентификатор 70 <продолжение4>

67 <продолжение4>:= 71;

72 <тип>:= 76 int

73 <тип>:= 77 float

74 <тип>:= 78 char

75 <тип>:= 79 идентификатор

82<ссылка>:= 84 *

83<ссылка>:= 85 e

Доказательство принадлежности к LL(1) – грамматике

С#

<предпроцессор>={using | namespace}

<операторы>={class | идентификатор |} | int | float | char}

<наследование>={: | {}

<продолжение1>={. | (|;)

<продолжение2>={(|;)

<продолжение3>={(|, |;)

<продолжение4>={, |;}

<тип >={int | float | char | идентификатор}

Грамматика java

<предпроцессор>={using | class | идентификатор | int | float | char}

<операторы>={class | идентификатор | int | float | char}

<наследование>={: | {}

<продолжение1>={-> | (|;)

<продолжение2>={(|;)

<продолжение3>={(|, |;)

<продолжение4>={, |;}

<тип >={int | float | char | идентификатор}

<ссылка>={* | идентификатор}

 

Таблицы разбора

Таблица разбора С#

Ожидаемый терминал Переход Принять В стек Из стека Ошибка
1. ~ 2 - - - -
2. ~ 7 - - - -
3. namespace 4 + - - +
4. { 5 + - - +
5. ~ 12 - + - -
6. } 0 + - + +
7. using 9 - - - -
8. ~ 11 - - - -
9. using 10 + - - +
10. ~ 7 - - - -
11. ~ 3 - - - -
12. class 16 - - - -
13. идентификатор 18 - - - -
14. } 21 - - - -
15. ~ 22 - - - -
16. ~ 24 - + - -
17. ~ 12 - - - -
18. идентификатор 19 + - - +
19. ~ 37 - + - -
20. ~ 12 - - - -
21. ~ 0 - - + -
22. ~ 51 - + - -
23 ~ 12 - - - -
24 ~ 25 - - - -
25 class 26 + - - +
26 идентификатор 27 + - - +
27 ~ 32 - + - -
28 { 29 + - - +
29 ~ 12 - + - -
30 ) 31 + - - +
31 ; 0 + - + +
32 : 34 - - - -
33 ~ 36 - - - -
34 : 35 + - - +
35 идентификатор 0 + - + +
36 ~ 0 - - + -
37 . 40 - - - -
38 ( 44 - - - -
39 ; 46 - - - +
40 . 41 + - - +
41 идентификатор 42 + - - +
42 ~ 47 - + - -
43 ; 0 + - + +
44 ~ 47 - + - -
45 ; 0 + - + +
46 ; 0 + - + +
47 ( 49 - - - -
48 ~ 80 - - - -
49 ( 50 + - - +
50 ) 0 + - + +
51 ~ 52 - - - -
52 ~ 72 - + - -
53 идентификатор 55 + - - +
54            
55 ~ 56 - - - -
56 ( 58 - - - -
57 ~ 65 - - - -
58 ( 59 + - - +
59 ) 60 + - - +
60 { 61 + - - +
61 ~ 12 - + - -
62 return 63 + - - +
63 литерал 64 + - - +
64 ; 81 + - - +
65 ~ 66 - - - -
66 , 68 - - - -
67 ; 71 - - - +
68 , 69 + - - +
69 идентификатор 70 + - - +
70 ~ 66 - - - -
71 ; 0 + - + +
72 int 76 - - - -
73 float 77 - - - -
74 char 78 - - - -
75 идентификатор 79 - - - +
76 int 0 + - + +
77 float 0 + - + +
78 char 0 + - + +
79 идентификатор 0 + - + +
80 ~ 0 - - + -
81 } 0 + - + +

Таблица разбора java

Ожидаемый терминал Переход Принять В стек Из стека Ошибка
1. ~ 2 - - - -
2. ~ 7 - - - -
3. ~ 12 - - - -
7. using 9 - - - -
8. ~ 11 - - - -
9. using 10 + - - +
10. ~ 7 - - - -
11. ~ 3 - - - -
12. class 16 - - - -
13. идентификатор 18 - - - -
14. } 21 - - - -
15. ~ 22 - - - -
16. ~ 24 - + - -
17. ~ 12 - - - -
18. идентификатор 19 + - - +
19. ~ 37 - + - -
20. ~ 12 - - - -
21. ~ 0 - - + -
22. ~ 51 - + - -
23 ~ 12 - - - -
24 ~ 25 - - - -
25 class 26 + - - +
26 идентификатор 27 + - - +
27 ~ 32 - + - -
28 { 29 + - - +
29 ~ 12 - + - -
30 ) 31 + - - +
31 ; 0 + - + +
32 : 34 - - - -
33 ~ 36 - - - -
34 : 35 + - - +
35 идентификатор 0 + - + +
36 ~ 0 - - + -
37 -> 40 - - - -
38 ( 44 - - - -
39 ; 46 - - - +
40 -> 41 + - - +
41 идентификатор 42 + - - +
42 ~ 47 - + - -
43 ; 0 + - + +
44 ~ 47 - + - -
45 ; 0 + - + +
46 ; 0 + - + +
47 ( 49 - - - -
48 ~ 80 - - - -
49 ( 50 + - - +
50 ) 0 + - + +
51 ~ 52 - - - -
52 ~ 72 - + - -
53 ~ 82 - - + -
54 идентификатор 55 + - - +
55 ~ 56 - - - -
56 ( 58 - - - -
57 ~ 65 - - - -
58 ( 59 + - - +
59 ) 60 + - - +
60 { 61 + - - +
61 ~ 12 - + - -
62 return 63 + - - +
63 литерал 64 + - - +
64 ; 81 + - - +
65 ~ 66 - - - -
66 , 68 - - - -
67 ; 71 - - - +
68 , 69 + - - +
69 идентификатор 70 + - - +
70 ~ 66 - - - -
71 ; 0 + - + +
72 int 76 - - - -
73 float 77 - - - -
74 char 78 - - - -
75 идентификатор 79 - - - +
76 int 0 + - + +
77 float 0 + - + +
78 char 0 + - + +
79 идентификатор 0 + - + +
80 ~ 0 - - + -
81 } 0 + - + +
82 * 84 - - - -
83 ~ 85 - - - -
84 * 0 + - + +
85 ~ 0 - - + -

Разработка программы

Классовая модель

Диаграмма прецедентов


Диаграмма классов

 



Поделиться с друзьями:

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.031 с.