Moved sls_py.calc

This commit is contained in:
Kyler Olsen 2025-12-08 00:07:27 -07:00
parent 56dcf72241
commit 36dad7e5e8
2 changed files with 14 additions and 8 deletions

View File

@ -6,7 +6,13 @@ Implements classic HP calculator interface with stack display
import tkinter as tk import tkinter as tk
from tkinter import ttk, font as tkfont from tkinter import ttk, font as tkfont
import sls_py from .. import (
InterpreterState,
LexerInfo,
lexical_analysis,
TokenType,
StackType,
)
class SlsCalculator: class SlsCalculator:
def __init__(self, root): def __init__(self, root):
@ -16,8 +22,8 @@ class SlsCalculator:
self.root.resizable(False, False) self.root.resizable(False, False)
# Initialize interpreter # Initialize interpreter
self.interp = sls_py.InterpreterState() self.interp = InterpreterState()
self.lexer = sls_py.LexerInfo() self.lexer = LexerInfo()
# Current entry buffer # Current entry buffer
self.entry_buffer = "" self.entry_buffer = ""
@ -199,10 +205,10 @@ class SlsCalculator:
self.lexer.column = 1 self.lexer.column = 1
self.lexer.line = 1 self.lexer.line = 1
tokens = sls_py.lexical_analysis(self.lexer) tokens = lexical_analysis(self.lexer)
for token in tokens: for token in tokens:
if token.type == sls_py.TokenType.EOF: if token.type == TokenType.EOF:
break break
if not self.interp.execute(token): if not self.interp.execute(token):
print(f"Error executing: {code}") print(f"Error executing: {code}")
@ -235,9 +241,9 @@ class SlsCalculator:
def format_stack_entry(self, entry): def format_stack_entry(self, entry):
"""Format a stack entry for display""" """Format a stack entry for display"""
if entry.type == sls_py.StackType.I64: if entry.type == StackType.I64:
return str(entry.value) return str(entry.value)
elif entry.type == sls_py.StackType.DOUBLE: elif entry.type == StackType.DOUBLE:
val = entry.value val = entry.value
# Format with appropriate precision # Format with appropriate precision
if abs(val) < 1e-10 and val != 0: if abs(val) < 1e-10 and val != 0:
@ -246,7 +252,7 @@ class SlsCalculator:
return f"{val:.6e}" return f"{val:.6e}"
else: else:
return f"{val:.10g}" return f"{val:.10g}"
elif entry.type == sls_py.StackType.BOOLEAN: elif entry.type == StackType.BOOLEAN:
return str(entry.value) return str(entry.value)
else: else:
return str(entry.value) return str(entry.value)