This repository has been archived by the owner on Nov 25, 2019. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gramatica_da_lalg.txt
89 lines (82 loc) · 2.39 KB
/
gramatica_da_lalg.txt
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Linguagem LALG (pascal simplificado)
1. <programa> ::= program ident ; <corpo> .
2. <corpo> ::= <dc> begin <comandos> end
3. <dc> ::= <dc_c> <dc_v> <dc_p>
4. <dc_c> ::= const ident = <numero> ; <dc_c> | λ
5. <dc_v> ::= var <variaveis> : <tipo_var> ; <dc_v> | λ
6. <tipo_var> ::= real | integer
7. <variaveis> ::= ident <mais_var>
8. <mais_var> ::= , <variaveis> | λ
9. <dc_p> ::= procedure ident <parametros> ; <corpo_p> <dc_p> | λ
10. <parametros> ::= ( <lista_par> ) | λ
11. <lista_par> ::= <variaveis> : <tipo_var> <mais_par>
12. <mais_par> ::= ; <lista_par> | λ
13. <corpo_p> ::= <dc_loc> begin <comandos> end ;
14. <dc_loc> ::= <dc_v>
15. <lista_arg> ::= ( <argumentos> ) | λ
16. <argumentos> ::= ident <mais_ident>
17. <mais_ident> ::= ; <argumentos> | λ
18. <pfalsa> ::= else <cmd> | λ
19. <comandos> ::= <cmd> ; <comandos> | λ
20. <cmd> ::= read ( <variaveis> ) |
write ( <variaveis> ) |
while ( <condicao> ) do <cmd> |
if <condicao> then <cmd> <pfalsa> |
ident := <expressão> |
ident <lista_arg> |
begin <comandos> end
21. <condicao> ::= <expressao> <relacao> <expressao>
22. <relacao> ::= = | <> | >= | <= | > | <
23. <expressao> ::= <termo> <outros_termos>
24. <op_un> ::= + | - | λ
25. <outros_termos> ::= <op_ad> <termo> <outros_termos> | λ
26. <op_ad> ::= + | -
27. <termo> ::= <op_un> <fator> <mais_fatores>
28. <mais_fatores> ::= <op_mul> <fator> <mais_fatores> | λ
29. <op_mul> ::= * | /
30. <fator> ::= ident | <numero> | ( <expressao> )
31. <numero> ::= numero_int | numero_real
Além disso, inclusão do comando for.
Comentários de única linha, entre chaves { }
Identificadores e números são itens léxicos da forma:
- ident: sequência de letras e dígitos, começando por letra
- número inteiro: sequência de dígitos (0 a 9)
- número real: pelo menos um dígito, seguido de um ponto decimal, seguido de uma sequência de um ou mais dígitos
Exemplos de programas LALG
program nome1;
{exemplo 1}
var a, a1, b: integer;
begin
read(a);
a1:= a1*2;
while (a1>0) do
begin
write(a1);
a1:= a1-1;
end;
for b:=1 to 10 do
begin
b:=b+2;
a:=a-1;
end;
if a<> b then write(a);
end.
program nome2;
{exemplo 2}
var a: real;
var b: integer;
procedure nomep(x: real);
var a, c: integer;
begin
read(c, a);
if a<x+c then
begin
a:= c+x;
write(a);
end
else c:= a+x;
end;
begin {programa principal}
read(b);
nomep(b);
end.