semicolumn

Transkript

semicolumn
Gramatika jazyku Pepina
Jan Dvořák (dvoraj19@fel, dvoraj42)
Očíslování pravidel:
#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
(startovní pravidlo: blokprikazu )
Název pravidla
blokprikazu
Hodnota
prirazeni
forcykl
whilecykl
docykl
ifpodm
deklarace
konzole
ukonceni
switch
vyraz
ndmd vyrazc
UVOZOVKY STROBSAH UVOZOVKY
PLUS ndmd vyrazc
MINUS ndmd vyrazc
vyrazc
ndmd
ndmdc
zavrk ndmdc
TIMES zavrk ndmdc
DIVIDED zavrk ndmdc
MODULO zavrk ndmdc
INTDIV zavrk ndmdc
zavrk
switch
case
LPAR vyraz RPAR
IDENT
znamenko hodnota
INTEGER_CONST
DOUBLE_CONST
SELECT CASE LPAR IDENT RPAR case caseelse ENDSELECT blokprikazu
CASE znamenko INTEGER_CONST COLON blokprikazu case
caseelse
DEFAULT COLON blokprikazu
prirazeni
podminka
forcykl
forstep
IDENT ASSIGN vyraz SEMICOLON blokprikazu
vyraz porovnani vyraz
FOR LPAR IDENT ASSIGN znamenko INTEGER_CONST TO znamenko INTEGER_CONST forstep RPAR blokprikazu NEXT blokprikazu
STEP znamenko INTEGER_CONST
whilecykl
docykl
ifpodm
ifelse
WHILE LPAR podminka RPAR blokprikazu WEND blokprikazu
DO blokprikazu DOWHILE LPAR podminka RPAR blokprikazu
IF LPAR podminka RPAR THEN blokprikazu ifelse ENDIF blokprikazu
ELSE blokprikazu
deklarace
typy
typy IDENT listident SEMICOLON blokprikazu
INTEGER
DOUBLE
STRING
COMMA IDENT listident
hodnota
listident
konzole
vypis
znamenko
porovnani
ukonceni
vypis LPAR vyraz RPAR SEMICOLON blokprikazu
PRINT
PRINTLN
PLUS
MINUS
EQ
NE
GT
LT
GE
LE
END SEMICOLON blokprikazu
BREAK SEMICOLON blokprikazu
Množina FIRST{}
#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Krok 1
Krok 2
First(prirazeni)
First(forcykl)
First(whilecykl)
First(docykl)
First(ifpodm)
First(deklarace)
First(konzole)
First(ukonceni)
First(switch)
Є
First(ndmd)
UVOZOVKY
PLUS
MINUS
Є
First(zavrk)
TIMES
DIVIDED
MODULO
INTDIV
Є
LPAR
IDENT
First(znamenko)
INTEGER_CONST
DOUBLE_CONST
SELECT
CASE
Є
DEFAULT
Є
IDENT
First(vyraz)
FOR
STEP
Є
WHILE
DO
IF
ELSE
Є
First(typy)
INTEGER
DOUBLE
STRING
COMMA
Є
First(vypis)
PRINT
PRINTLN
PLUS
MINUS
Є
EQ
NE
GT
LT
GE
LE
END
BREAK
IDENT
FOR
WHILE
DO
IF
Krok 3
INTEGER, DOUBLE, STRING
PRINT, PRINTLN
END, BREAK
SELECT
LPAR, IDENT, PLUS, MINUS, INTEGER_CONST, DOUBLE_CONST
LPAR, IDENT, First(znamenko)
PLUS, MINUS, INTEGER_CONST, DOUBLE_CONST
PLUS, MINUS
INTEGER_CONST, DOUBLE_CONST
LPAR, IDENT, PLUS, MINUS, UVOZOVKY
INTEGER, DOUBLE, STRING
PRINT, PRINTLN
Výsledek
{ IDENT }
{ FOR }
{WHILE }
{DO}
{ IF }
{ INTEGER, DOUBLE, STRING }
{ PRINT, PRINTLN }
{ END, BREAK }
{ SÉLECT }
{Є}
{ LPAR, IDENT, PLUS, MINUS, INTEGER_CONST, DOUBLE_CONST }
{ UVOZOVKY}
{ PLUS }
{ MINUS }
{Є}
{ LPAR, IDENT, PLUS, MINUS, INTEGER_CONST, DOUBLE_CONST }
{ TIMES }
{ DIVIDED }
{ MODULO }
{ INDTDIV}
{Є}
{ LPAR }
{IDENT }
{ PLUS, MINUS, INTEGER_CONST, DOUBLE_CONST }
{ INTEGER_CONST }
{ DOUBLE_CONST }
{ SELECT}
{ CASE }
{Є}
{ DEFAULT }
{Є}
{ IDENT }
{ LPAR, IDENT, PLUS, MINUS, INTEGER_CONST, DOUBLE_CONST, UVOZOVKY}
{ FOR }
{ STEP }
{Є}
{ WHILE }
{ DO }
{ IF }
{ ELSE }
{Є}
{ INTEGER, DOUBLE, STRING }
{ INTEGER }
{ DOUBLE }
{ STRING }
{ COMMA }
{Є}
{ PRINT, PRINTLN}
{ PRINT }
{ PRINTLN }
{ PLUS }
{ MINUS }
{Є}
{ EQ }
{ NE }
{ GT }
{ LT }
{ GE }
{ LE }
{ END }
{ BREAK }
#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Množina FOLLOW{}
Pravidlo
blokprikazu
Krok 1
Є
vyraz
vyrazc
ndmd
ndmdc
zavrk
hodnota
switch
case
caseelse
prirazeni
podminka
forcykl
forstep
whilecykl
docykl
ifpodm
ifelse
deklarace
typy
listident
konzole
vypis
znamenko
porovnani
ukonceni
Krok 2
Krok 3
Krok 4
Folow(switch), First(case), Follow(caseelse),
Follow(prirazeni), NEXT, Follow(forstep), WEND,
DOWHILE, Follow(whilecykl), Follow(docykl),
First(ifelse), Follow(ifpodm), Follow(ifelse),
Follow(deklarace), Follow(konzole), Follow(ukonceni)
First(porovnani), RPAR, SEMICOLON, Follow(podminka),
Follow(vyraz)
First(vyrazc)
Follow(ndmd)
First(ndmdc)
Follow(zavrk)
Follow(blokprikazu)
First(caseelse)
ENDSELECT
Follow(blokprikazu)
RPAR
Follow(blokprikazu)
RPAR
Follow(blokprikazu)
Follow(blokprikazu)
Follow(blokprikazu)
ENDIF
Follow(blokprikazu)
IDENT
SEMICOLON
Follow(blokprikazu)
LPAR
First(hodnota), INTEGER_CONST
First(vyraz)
Follow(blokprikazu)
NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, First(caseelse)
DEFAULT
EQ, NE, GT, LT, GE, LE
EQ, NE, GT, LT, GE, LE
RPAR, SEMICOLON, EQ, NE, GT, LT, GE, LE
RPAR, SEMICOLON, EQ, NE, GT, LT, GE, LE
PLUS, MINUS, RPAR, SEMICOLON, EQ, NE, GT, LT, GE, LE
RPAR, SEMICOLON, EQ, NE, GT, LT, GE, LE, PLUS, MINUS
TIMES, DIVIDED, MODULO,INTDIV, RPAR, SEMICOLON, EQ, NE, GT, LT, GE, LE, PLUS, MINUS
Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT
ENDSELECT
PLUS, MINUS, Follow(vyraz), Follow(vyrazc)
TIMES, DIVIDED, MODULO,INTDIV, Follow(ndmd)
DEFAULT, Follow(caseelse)
Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT
Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT
Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT
Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT
Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT
Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT
Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT
DOUBLE_CONST
LPAR, IDENT, PLUS, MINUS, INTEGER_CONST, DOUBLE_CONST, UVOZOVKY
Pravidlo
Výsledek
blokprikazu
vyraz
vyrazc
ndmd
ndmdc
zavrk
hodnota
switch
case
caseelse
prirazeni
podminka
forcykl
forstep
whilecykl
docykl
ifpodm
ifelse
deklarace
typy
listident
konzole
vypis
znamenko
porovnani
ukonceni
{ Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT }
{ RPAR, SEMICOLON, EQ, NE, GT, LT, GE, LE }
{ RPAR, SEMICOLON, EQ, NE, GT, LT, GE, LE }
{ PLUS, MINUS, RPAR, SEMICOLON, EQ, NE, GT, LT, GE, LE }
{ PLUS, MINUS, RPAR, SEMICOLON, EQ, NE, GT, LT, GE, LE }
{ TIMES, DIVIDED, MODULO,INTDIV, RPAR, SEMICOLON, EQ, NE, GT, LT, GE, LE, PLUS, MINUS }
{ TIMES, DIVIDED, MODULO,INTDIV, RPAR, SEMICOLON, EQ, NE, GT, LT, GE, LE, PLUS, MINUS }
{ Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT }
{ ENDSELECT, DEFAULT }
{ ENDSELECT }
{ Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT }
{ RPAR }
{ Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT }
{ RPAR }
{ Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT }
{ Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT }
{ Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT }
{ ENDIF }
{ Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT }
{ IDENT }
{ SEMICOLON }
{ Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT }
{ LPAR }
{ INTEGER_CONST, DOUBLE_CONST }
{ LPAR, IDENT, PLUS, MINUS, INTEGER_CONST, DOUBLE_CONST, UVOZOVKY }
{ Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT }
Є, NEXT, CASE, ENDSELECT, WEND, DOWHILE, ELSE, ENDIF, DEFAULT
Tabulka přechodů – Rozkladová tabulka – LL(1)
Tabulka 1: Černě: FIRST, červeně FOLLOW
Pravidlo
blokprikazu
vyraz
vyrazc
ndmd
ndmdc
zavrk
hodnota
switch
case
caseelse
prirazeni
podminka
forcykl
forstep
whilecykl
docykl
ifpodm
ifelse
deklarace
typy
listident
konzole
vypis
znamenko
porovnani
ukonceni
=
+
11
13
16
21
24
-
*
/ \
%
11
14
16
21 17 18 20 19
24
==
!=
>
<
>=
<=
15
15 15 15 15
15
21
21 21 21 21
21
(
)
,
; „
11
STROBSAH
SELECT
9
CASE
10
ENDSELECT
10
COLON
DEFAULT
10
FOR
2
TO
STEP
NEXT
10
WHILE
3
WEND
10
DO
4
DOWHILE
10
END
8
BREAK
8
IF
5
THEN
ELSE
10
ENDIF
10
INTEGER
6
DOUBLE
6
STRING
6
12
15
15
21
21
16
22
IDENT
1
11
INTEGER_CONST
DOUBLE_CONST
11
11
16
16
16
23
24
25
24
26
33
33
PRINT
7
PRINTLN
7
48
49
48
50
27
28
33 33
33
29
31
29
30
32
33
33
34
36
35
37
38
39
40
41
42
43
42
44
42
45
46 47
51 52
53
54
55 56 57 58
59
60
61
53
Є
10

Podobné dokumenty

Tutoriál 3: Procedury Prostředí NetLogo ver. 3.1.4

Tutoriál 3: Procedury Prostředí NetLogo ver. 3.1.4 provést. V našem případě po nových želvách požadujeme, aby nastavily svoji energii na hodnotu 50. Rodí se tedy s určitou dávkou energie. Když každá želva spustí proceduru „check-death“, pak dochází...

Více

Přiřazovací problémy

Přiřazovací problémy zachycuje následující tabulka. Jejich cílem je, aby všichni dohromady strávili nad vypracováním otázek co nejméně. model: sets: student/S1,S2,S3/; otazky/O1,O2,O3/; prirazeni(student, otazky): x,ca...

Více

Tutorial 3: Procedury

Tutorial 3: Procedury • Do pole Global variable (Globální proměnná) dialogového okna napište: ukazatenergii? Nezapomeňte na otazník. (Viz obrázek níže.)

Více

Slovníček NetLogo

Slovníček NetLogo Vykoná první sadu příkazů. Nastane-li běhová chyba uvnitř prvních příkazů, NetLogo se nezastaví a neupozorní na tuto chybu uživatele, ale přeskočí ji a místo toho vykoná druhou sadu příkazů. V druh...

Více

Symantec™ ApplicationHA

Symantec™ ApplicationHA • Integrace s nástrojem VMware vCenter Site Recovery Manager™ – Řešení ApplicationHA je integrováno s nástrojem Site Recovery Manager, který v plánu obnovení po zhroucení zajišťuje podporu aplikací...

Více

Regulární výrazy

Regulární výrazy Regulární výrazy Regulární výrazy jsou určeny pro práci s textovými řetězci, jsou součástí J2SDK až od verze 1.4, v předchozích verzích je potřeba použít některou z externích knihoven, např. knihov...

Více