-
Notifications
You must be signed in to change notification settings - Fork 0
/
defs.lua
73 lines (59 loc) · 1.92 KB
/
defs.lua
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
local linha
local token = { }
-- O campo 'cod' representa o codigo que deve ser gerado para um token
-- no caso de uma traducao para C/C++
-- O campo 's' indica qual eh o texto no programa fonte associado a um token
local function insereToken (s, op, cod)
token[s] = { s = s, op = op, cod = cod }
end
insereToken(">=", "opMaiorIg", ">=")
insereToken(">", "opMaior", ">")
insereToken("<=", "opMenorIg", "<=")
insereToken("<", "opMenor", "<")
insereToken("==", "opIgual", "==")
insereToken("=", "opAtrib", "=")
insereToken("+", "opSoma", "+")
insereToken("-", "opSub", "-")
insereToken("*", "opMult", "*")
insereToken("/", "opDiv", "/")
insereToken("mod", "opMod", "%")
insereToken("e", "opE", "&&")
insereToken("ou", "opOu", "||")
insereToken("nao", "opNao", "!")
insereToken("nao=", "opDif", "!=")
local TipoTag = { array = {}, simples = {}, naotipado = {} }
local TipoBasico = { naotipado = {}, bool = {}, inteiro = {}, numero = {}, texto = {}, vazio = {} }
local Tag = { decVar = {}, decFuncao = {}, decArrayVar = {}, decVarLista = {}, bloco = {},
cmdAtrib = {}, cmdRepita = {}, cmdSe = {}, cmdSenaoSe = {}, cmdRetorne = {},
blocoSenaoSe = {},
expBool = {}, expInt = {}, expNum = {}, expTexto = {}, expNovoArray = {},
expSimpVar = {}, expArrayVar = {}, expOpNum = {}, expOpComp = {}, expOpBool = {},
cmdChamada = {}, expChamada = {}, expNao = {},
}
for k, v in pairs(Tag) do
Tag[k] = k
end
for k, v in pairs(TipoBasico) do
TipoBasico[k] = k
end
for k, v in pairs(TipoTag) do
TipoTag[k] = k
end
local function getToken (s)
assert(token[s])
local v = token[s]
return { op = v.op, cod = v.cod, s = s }
end
local function getTipoBasico(t)
if t == "booleano" then t = "bool" end
assert(TipoBasico[t], t)
return TipoBasico[t]
end
return {
linha = linha,
getToken = getToken,
getTipoBasico = getTipoBasico,
Tag = Tag,
TipoTag = TipoTag,
TipoBasico = TipoBasico,
}