38 lines
946 B
Python
38 lines
946 B
Python
from pathlib import Path
|
|
from sls.lexer import LexerInfo, lexical_analysis, Token
|
|
from sls.interpreter import InterpreterState
|
|
|
|
|
|
def exec_file(interpreter_state: InterpreterState, filename: str) -> bool:
|
|
path = Path(filename)
|
|
|
|
if not path.exists():
|
|
print(f"Cannot read file: {filename}")
|
|
return False
|
|
|
|
try:
|
|
code = path.read_text()
|
|
except Exception:
|
|
print(f"Cannot read file: {filename}")
|
|
return False
|
|
|
|
lexer_info = LexerInfo(filename=filename, source_code=code)
|
|
|
|
tokens: list[Token] = lexical_analysis(lexer_info)
|
|
|
|
for tok in tokens:
|
|
if not interpreter_state.execute(tok):
|
|
print("A runtime error occurred!")
|
|
return False
|
|
|
|
return True
|
|
|
|
def run_file(filename: str) -> int:
|
|
print(f"Executing file: {filename}")
|
|
|
|
interpreter_state = InterpreterState()
|
|
|
|
success = exec_file(interpreter_state, filename)
|
|
|
|
return 0 if success else 1
|