46 lines
824 B
Python
46 lines
824 B
Python
|
|
from typing import List, Dict, Any, Optional
|
|
from dataclasses import dataclass, asdict
|
|
|
|
|
|
@dataclass
|
|
class Token:
|
|
type: str
|
|
value: Any
|
|
|
|
|
|
@dataclass
|
|
class Operation:
|
|
function: str
|
|
type: str
|
|
value: Any
|
|
|
|
|
|
@dataclass
|
|
class StackItem:
|
|
type: str
|
|
value: Any
|
|
|
|
|
|
@dataclass
|
|
class RuntimeError:
|
|
message: str
|
|
|
|
|
|
@dataclass
|
|
class TestCase:
|
|
name: str
|
|
code: str
|
|
tokens: List[Dict[str, Any]]
|
|
operations: Optional[List[Dict[str, Any]]] = None
|
|
stack_final: Optional[List[Dict[str, Any]]] = None
|
|
runtime_error: Optional[Dict[str, str]] = None
|
|
|
|
|
|
def to_dict(obj):
|
|
"""Convert dataclass to dict, removing None values."""
|
|
if obj is None:
|
|
return None
|
|
d = asdict(obj) if hasattr(obj, '__dataclass_fields__') else obj
|
|
return {k: v for k, v in d.items() if v is not None}
|