mirror of
https://github.com/Alvin-Zilverstand/femcode.git
synced 2026-04-23 02:50:09 +02:00
37 lines
969 B
Python
37 lines
969 B
Python
|
|
class AST:
|
||
|
|
pass
|
||
|
|
|
||
|
|
class Print(AST):
|
||
|
|
def __init__(self, value):
|
||
|
|
self.value = value
|
||
|
|
|
||
|
|
class Parser:
|
||
|
|
def __init__(self, tokens):
|
||
|
|
self.tokens = tokens
|
||
|
|
self.pos = 0
|
||
|
|
|
||
|
|
def get_next_token(self):
|
||
|
|
if self.pos < len(self.tokens):
|
||
|
|
token = self.tokens[self.pos]
|
||
|
|
self.pos += 1
|
||
|
|
return token
|
||
|
|
return None
|
||
|
|
|
||
|
|
def parse(self):
|
||
|
|
statements = []
|
||
|
|
while True:
|
||
|
|
token = self.get_next_token()
|
||
|
|
if token is None or token.type == 'EOF':
|
||
|
|
break
|
||
|
|
|
||
|
|
if token.type == 'PRINT':
|
||
|
|
next_token = self.get_next_token()
|
||
|
|
if next_token.type == 'STRING':
|
||
|
|
statements.append(Print(next_token.value))
|
||
|
|
else:
|
||
|
|
raise Exception("Expected a string after 'UwU Boy'")
|
||
|
|
else:
|
||
|
|
raise Exception(f"Unexpected token: {token.type}")
|
||
|
|
|
||
|
|
return statements
|