Skip to content

Commit 2ff4a24

Browse files
committed
código da aula de 04.11.2025
1 parent 22f3157 commit 2ff4a24

14 files changed

Lines changed: 1004 additions & 0 deletions

2025-10-30/block.basic

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ PROGRAM blocks BEGIN
99
DECL w : STRING
1010
LET w = "Algum valor"
1111
PRINT w
12+
PRINT s
1213
ENDBLOCK
1314

1415
PRINT w

2025-11-04/astnodes.py

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
class Program(object):
2+
def __init__(self,name,ls):
3+
self.name = name
4+
self.stmts = ls
5+
6+
class Stmt(object):
7+
pass
8+
9+
class PrintStmt(Stmt):
10+
def __init__(self, exp):
11+
self.exp = exp
12+
13+
class InputStmt(Stmt):
14+
def __init__(self, nome):
15+
self.id = nome
16+
17+
class VarDeclStmt(Stmt):
18+
def __init__(self, nome, t):
19+
self.id = nome
20+
self.type = t
21+
22+
class LetStmt(Stmt):
23+
def __init__(self, nome, e):
24+
self.id = nome
25+
self.exp = e
26+
27+
class BlockStmt(Stmt):
28+
def __init__(self, nome, corpo):
29+
self.name = nome
30+
self.body = corpo
31+
32+
class IfStmt(Stmt):
33+
def __init__(self, c, corpo):
34+
self.cond = c
35+
self.body = corpo
36+
37+
class WhileStmt(Stmt):
38+
def __init__(self, c, corpo):
39+
self.cond = c
40+
self.body = corpo
41+
42+
class Expr(object):
43+
pass
44+
45+
class IdExpr(Expr):
46+
def __init__(self, nome):
47+
self.id = nome
48+
49+
class StringExpr(Expr):
50+
def __init__(self, s):
51+
self.str = s
52+
53+
class ArithExpr(Expr):
54+
pass
55+
56+
class SumExpr(ArithExpr):
57+
def __init__(self, ladoEsquerdo, ladoDireito):
58+
self.left = ladoEsquerdo
59+
self.right = ladoDireito
60+
61+
class SubExpr(ArithExpr):
62+
def __init__(self, ladoEsquerdo, ladoDireito):
63+
self.left = ladoEsquerdo
64+
self.right = ladoDireito
65+
66+
class MulExpr(ArithExpr):
67+
def __init__(self, ladoEsquerdo, ladoDireito):
68+
self.left = ladoEsquerdo
69+
self.right = ladoDireito
70+
71+
class DivExpr(ArithExpr):
72+
def __init__(self, ladoEsquerdo, ladoDireito):
73+
self.left = ladoEsquerdo
74+
self.right = ladoDireito
75+
76+
class UnaryPlusExpr(ArithExpr):
77+
def __init__(self, e):
78+
self.exp = e
79+
80+
class UnaryMinusExpr(ArithExpr):
81+
def __init__(self, e):
82+
self.exp = e
83+
84+
class NumExpr(ArithExpr):
85+
def __init__(self, valor):
86+
self.v = valor
87+
88+
class BooleanExpr(Expr):
89+
pass
90+
91+
class EqualsExpr(BooleanExpr):# left == right
92+
def __init__(self, ladoEsquerdo, ladoDireito):
93+
self.left = ladoEsquerdo
94+
self.right = ladoDireito
95+
96+
class NotEqualsExpr(BooleanExpr):# left != right
97+
def __init__(self, ladoEsquerdo, ladoDireito):
98+
self.left = ladoEsquerdo
99+
self.right = ladoDireito
100+
101+
class GreaterThanEqualsExpr(BooleanExpr):# left >= right
102+
def __init__(self, ladoEsquerdo, ladoDireito):
103+
self.left = ladoEsquerdo
104+
self.right = ladoDireito
105+
106+
class GreaterThanExpr(BooleanExpr):# left > right
107+
def __init__(self, ladoEsquerdo, ladoDireito):
108+
self.left = ladoEsquerdo
109+
self.right = ladoDireito
110+
111+
class LessThanEqualsExpr(BooleanExpr):# left <= right
112+
def __init__(self, ladoEsquerdo, ladoDireito):
113+
self.left = ladoEsquerdo
114+
self.right = ladoDireito
115+
116+
class LessThanExpr(BooleanExpr):# left < right
117+
def __init__(self, ladoEsquerdo, ladoDireito):
118+
self.left = ladoEsquerdo
119+
self.right = ladoDireito

2025-11-04/basic.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from lexer import *
2+
from parse import *
3+
from visitor import *
4+
import sys
5+
6+
def main():
7+
if len(sys.argv) != 2:
8+
sys.exit("Erro: Precisamos de um arquivo como argumento.")
9+
with open(sys.argv[1], 'r') as inputFile:
10+
input = inputFile.read()
11+
12+
lexer = Lexer(input)
13+
parser = Parser(lexer)
14+
program = parser.parse()
15+
16+
print(program)
17+
# visitor = CountPrint(program)
18+
# print('Antes de contar: '+ str(visitor.numPrint))
19+
# visitor.contar()
20+
# print('Depois de contar: '+ str(visitor.numPrint))
21+
22+
23+
# visitor = PrintAST(program)
24+
# print(visitor.printAST())
25+
26+
# visitor = BuildSymbolTable(program)
27+
# print(visitor.symbolTable)
28+
# symbolTable = visitor.buildTable()
29+
# print(symbolTable)
30+
31+
# visitor = TypeCheckVisitor(program)
32+
# print("Type check:", visitor.typecheck())
33+
# print(visitor.symbolTable)
34+
visitor = GenPythonCodeVisitor(program)
35+
code = visitor.genPython()
36+
print(code)
37+
# print("Type check:", visitor.typecheck())
38+
# print(visitor.symbolTable)
39+
40+
41+
main()

2025-11-04/block.basic

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
PROGRAM blocks BEGIN
2+
DECL w : INT
3+
LET w = 120
4+
PRINT w
5+
DECL s : STRING
6+
LET s = "Algum valor"
7+
8+
BLOCK teste BEGIN
9+
DECL w : STRING
10+
LET w = "Algum valor"
11+
PRINT w
12+
PRINT s
13+
ENDBLOCK
14+
15+
PRINT w
16+
17+
BLOCK outroteste BEGIN
18+
DECL w : BOOLEAN
19+
LET w = TRUE
20+
PRINT w
21+
ENDBLOCK
22+
23+
PRINT w
24+
25+
ENDPROGRAM

2025-11-04/compare.basic

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
PROGRAM outronome BEGIN
2+
PRINT "Type a number"
3+
DECL num : INT
4+
INPUT num
5+
IF num > 100 THEN
6+
PRINT "Maior que 100"
7+
ENDIF
8+
IF num < 100 THEN
9+
PRINT "Menor que 100"
10+
ENDIF
11+
IF num == 100 THEN
12+
PRINT "Digitou 100"
13+
ENDIF
14+
ENDPROGRAM

2025-11-04/fib.basic

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
PROGRAM fibonacci BEGIN
2+
PRINT "How many fibonacci numbers do you want?"
3+
DECL nums : INT
4+
INPUT nums
5+
DECL a : INT
6+
DECL b : INT
7+
DECL c : INT
8+
LET a = 0
9+
LET b = 1
10+
11+
WHILE nums > 0 REPEAT
12+
PRINT a
13+
LET c = a + b
14+
LET a = b
15+
LET b = c
16+
LET nums = nums - 1
17+
ENDWHILE
18+
19+
PRINT b
20+
ENDPROGRAM

0 commit comments

Comments
 (0)