agtest/agruntime.tmpl.py

54 lines
1,009 B
Python
Raw Normal View History

2021-09-30 22:53:47 +00:00
# This document is generated by agtest.
# type: ignore
__all__ = ["parse"]
import re
from typing import Generic, TypeVar, Optional, Callable, Dict, Any
from lark import Lark, Transformer
2021-10-01 02:58:18 +00:00
T = TypeVar("T")
builtins: Dict[str, Any] = {{"parseInt": lambda s: int(s)}}
2021-09-30 22:53:47 +00:00
class Thunk(Generic[T]):
2021-10-01 02:58:18 +00:00
"""A thunk represents a value that may be computed lazily."""
2021-09-30 22:53:47 +00:00
value: Optional[T]
2021-10-01 02:58:18 +00:00
2021-09-30 22:53:47 +00:00
def __init__(self, func: Callable[[], T]):
self.func = func
self.value = None
2021-10-01 02:58:18 +00:00
2021-09-30 22:53:47 +00:00
def get(self) -> T:
if self.value is None:
self.value = self.func()
return self.value
2021-10-01 02:58:18 +00:00
parser = Lark(
"""
2021-09-30 22:53:47 +00:00
{pd}
2021-10-01 02:58:18 +00:00
""",
parser="lalr",
start={starts},
debug=True,
)
2021-09-30 22:53:47 +00:00
{ex}
2021-10-01 02:58:18 +00:00
class Trans(Transformer[None]):
{transdef}
2021-09-30 22:53:47 +00:00
__agNonterminals = {ntmap}
2021-10-01 02:58:18 +00:00
2021-09-30 22:53:47 +00:00
def parse(input: str, start: Optional[str] = None) -> Any:
2021-10-01 02:58:18 +00:00
if start is not None:
start = __agNonterminals[start]
2021-09-30 22:53:47 +00:00
tree = parser.parse(input, start)
trans = Trans()
res = trans.transform(tree)
return res