имя | номер в классе | тип |
Структура таблицы литералов
имя | тип |
Разработка синтаксического анализатора
Грамматика языков
В данном проекте исследуется лишь малая часть возможностей и особенностей вышеуказанных языков. В связи с этим спроектированные грамматики для этих языков будут включать лишь те структуры языка, которые нам необходимы
Грамматика С#
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. | ~ | - | - | - | - | |
3. | namespace | + | - | - | + | |
4. | { | + | - | - | + | |
5. | ~ | - | + | - | - | |
6. | } | + | - | + | + | |
7. | using | - | - | - | - | |
8. | ~ | - | - | - | - | |
9. | using | + | - | - | + | |
10. | ~ | - | - | - | - | |
11. | ~ | - | - | - | - | |
12. | class | - | - | - | - | |
13. | идентификатор | - | - | - | - | |
14. | } | - | - | - | - | |
15. | ~ | - | - | - | - | |
16. | ~ | - | + | - | - | |
17. | ~ | - | - | - | - | |
18. | идентификатор | + | - | - | + | |
19. | ~ | - | + | - | - | |
20. | ~ | - | - | - | - | |
21. | ~ | - | - | + | - | |
22. | ~ | - | + | - | - | |
~ | - | - | - | - | ||
~ | - | - | - | - | ||
class | + | - | - | + | ||
идентификатор | + | - | - | + | ||
~ | - | + | - | - | ||
{ | + | - | - | + | ||
~ | - | + | - | - | ||
) | + | - | - | + | ||
; | + | - | + | + | ||
: | - | - | - | - | ||
~ | - | - | - | - | ||
: | + | - | - | + | ||
идентификатор | + | - | + | + | ||
~ | - | - | + | - | ||
. | - | - | - | - | ||
( | - | - | - | - | ||
; | - | - | - | + | ||
. | + | - | - | + | ||
идентификатор | + | - | - | + | ||
~ | - | + | - | - | ||
; | + | - | + | + | ||
~ | - | + | - | - | ||
; | + | - | + | + | ||
; | + | - | + | + | ||
( | - | - | - | - | ||
~ | - | - | - | - | ||
( | + | - | - | + | ||
) | + | - | + | + | ||
~ | - | - | - | - | ||
~ | - | + | - | - | ||
идентификатор | + | - | - | + | ||
~ | - | - | - | - | ||
( | - | - | - | - | ||
~ | - | - | - | - | ||
( | + | - | - | + | ||
) | + | - | - | + | ||
{ | + | - | - | + | ||
~ | - | + | - | - | ||
return | + | - | - | + | ||
литерал | + | - | - | + | ||
; | + | - | - | + | ||
~ | - | - | - | - | ||
, | - | - | - | - | ||
; | - | - | - | + | ||
, | + | - | - | + | ||
идентификатор | + | - | - | + | ||
~ | - | - | - | - | ||
; | + | - | + | + | ||
int | - | - | - | - | ||
float | - | - | - | - | ||
char | - | - | - | - | ||
идентификатор | - | - | - | + | ||
int | + | - | + | + | ||
float | + | - | + | + | ||
char | + | - | + | + | ||
идентификатор | + | - | + | + | ||
~ | - | - | + | - | ||
} | + | - | + | + |
Таблица разбора java
№ | Ожидаемый терминал | Переход | Принять | В стек | Из стека | Ошибка |
1. | ~ | - | - | - | - | |
2. | ~ | - | - | - | - | |
3. | ~ | - | - | - | - | |
7. | using | - | - | - | - | |
8. | ~ | - | - | - | - | |
9. | using | + | - | - | + | |
10. | ~ | - | - | - | - | |
11. | ~ | - | - | - | - | |
12. | class | - | - | - | - | |
13. | идентификатор | - | - | - | - | |
14. | } | - | - | - | - | |
15. | ~ | - | - | - | - | |
16. | ~ | - | + | - | - | |
17. | ~ | - | - | - | - | |
18. | идентификатор | + | - | - | + | |
19. | ~ | - | + | - | - | |
20. | ~ | - | - | - | - | |
21. | ~ | - | - | + | - | |
22. | ~ | - | + | - | - | |
~ | - | - | - | - | ||
~ | - | - | - | - | ||
class | + | - | - | + | ||
идентификатор | + | - | - | + | ||
~ | - | + | - | - | ||
{ | + | - | - | + | ||
~ | - | + | - | - | ||
) | + | - | - | + | ||
; | + | - | + | + | ||
: | - | - | - | - | ||
~ | - | - | - | - | ||
: | + | - | - | + | ||
идентификатор | + | - | + | + | ||
~ | - | - | + | - | ||
-> | - | - | - | - | ||
( | - | - | - | - | ||
; | - | - | - | + | ||
-> | + | - | - | + | ||
идентификатор | + | - | - | + | ||
~ | - | + | - | - | ||
; | + | - | + | + | ||
~ | - | + | - | - | ||
; | + | - | + | + | ||
; | + | - | + | + | ||
( | - | - | - | - | ||
~ | - | - | - | - | ||
( | + | - | - | + | ||
) | + | - | + | + | ||
~ | - | - | - | - | ||
~ | - | + | - | - | ||
~ | - | - | + | - | ||
идентификатор | + | - | - | + | ||
~ | - | - | - | - | ||
( | - | - | - | - | ||
~ | - | - | - | - | ||
( | + | - | - | + | ||
) | + | - | - | + | ||
{ | + | - | - | + | ||
~ | - | + | - | - | ||
return | + | - | - | + | ||
литерал | + | - | - | + | ||
; | + | - | - | + | ||
~ | - | - | - | - | ||
, | - | - | - | - | ||
; | - | - | - | + | ||
, | + | - | - | + | ||
идентификатор | + | - | - | + | ||
~ | - | - | - | - | ||
; | + | - | + | + | ||
int | - | - | - | - | ||
float | - | - | - | - | ||
char | - | - | - | - | ||
идентификатор | - | - | - | + | ||
int | + | - | + | + | ||
float | + | - | + | + | ||
char | + | - | + | + | ||
идентификатор | + | - | + | + | ||
~ | - | - | + | - | ||
} | + | - | + | + | ||
* | - | - | - | - | ||
~ | - | - | - | - | ||
* | + | - | + | + | ||
~ | - | - | + | - |
Разработка программы
Классовая модель
Диаграмма прецедентов
Диаграмма классов