Moved sls_py.calc
This commit is contained in:
parent
56dcf72241
commit
36dad7e5e8
|
|
@ -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)
|
||||||
Loading…
Reference in New Issue