Смекни!
smekni.com

Разработка транслятора в среде Java и С+ (стр. 2 из 3)

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 - - + -

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

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

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


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