-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNo.cs
More file actions
70 lines (60 loc) · 1.66 KB
/
No.cs
File metadata and controls
70 lines (60 loc) · 1.66 KB
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
abstract class No
{
// Informa se esse nó já foi compilado para que não se repita
public bool Compilado { get; private set; } = false;
// Trecho de código fonte a qual esse nó pertence
public Trecho Trecho { get; set; }
public No(Trecho trecho)
{
Trecho = trecho;
}
public Erro Erro(string msg)
{
return new Erro(Trecho, msg);
}
// Rotinas implementadas pelos Nos
protected abstract void CompilaInterno(Ambiente amb);
protected abstract No OtimizaInterno(Ambiente amb);
protected abstract void InicializaInterno(Ambiente amb);
// Comandos para facilitar a programação dos Nos
public void Inicializa(Ambiente amb)
{
amb.Trecho = Trecho;
InicializaInterno(amb);
}
protected void InicializaLista(List<No> nos, Ambiente amb)
{
foreach(var no in nos)
{
no.Inicializa(amb);
}
}
public No Otimiza(Ambiente amb)
{
amb.Trecho = Trecho;
return OtimizaInterno(amb);
}
protected List<No> OtimizaLista(List<No> nos, Ambiente amb)
{
List<No> ret = new List<No>();
foreach(var no in nos)
{
ret.Add(no.Otimiza(amb));
}
return ret;
}
public void Compila(Ambiente amb)
{
amb.Saida.EmiteComentario($" ---=== {Trecho.Fonte.NomeCompleto}:{Trecho.Linha}:{Trecho.Coluna} ===---");
amb.Trecho = Trecho;
if(!Compilado)CompilaInterno(amb);
Compilado = true;
}
protected void CompilaLista(List<No> nos, Ambiente amb)
{
foreach(var no in nos)
{
no.Compila(amb);
}
}
}