samoyed package
Submodules
samoyed.core module
- class samoyed.core.Context(names: Optional[dict] = None, dollar_names: Optional[Dict[str, str]] = None)[source]
Bases:
object上下文
- class samoyed.core.Interpreter(code: Union[str, lark.tree.Tree], context: Optional[dict] = None, args: Optional[dict] = None, dont_init=False)[source]
Bases:
object解释器类
- __init__(code: Union[str, lark.tree.Tree], context: Optional[dict] = None, args: Optional[dict] = None, dont_init=False)[source]
- Parameters
code (Union[str, lark.Tree]) – 代码
context (dict) – 额外的上下文
args (dict) – 命令行等特殊参数
dont_init (bool) – 是否执行初始化
- _match_value(value1: Union[int, float, bool, None, str], value2: Union[int, float, bool, None, str, re.Pattern]) Tuple[bool, Optional[re.Match]][source]
判断节点的值是否匹配 如果是正则匹配会返回匹配结果 :param value1: 要匹配的值 :param value2: 匹配的值2,可以是正则表达式。判断value1是否满足正则表达式的pattern
- Returns
bool 匹配是否成功
result 匹配结果
- arith_operator = {'%': <built-in function mod>, '*': <built-in function mul>, '+': <function mock_add>, '-': <built-in function sub>, '/': <built-in function truediv>, '//': <built-in function floordiv>}
- compare_operator = {'!=': <built-in function ne>, '<': <built-in function lt>, '<=': <built-in function le>, '==': <built-in function eq>, '>': <built-in function gt>, '>=': <built-in function ge>}
- exec_statement(stat: lark.tree.Tree) None[source]
执行每一个语句 可执行的语句有以下几种: * simple_stmt 简单的语句,包括赋值表达式,跳转表达式,pass表达式和普通表达式 * if_stmt if语句 * match_stmt 包括普通的match和可以控制输入时间的match
- Parameters
stat – 语句的语法分析结果
- Raises
SamoyedRuntimeError – 其他运行错误
SamoyedTypeError – 类型错误
- f = <_io.TextIOWrapper name='/home/docs/checkouts/readthedocs.org/user_builds/samoyed/checkouts/latest/samoyed/samoyed.gram' mode='r' encoding='UTF-8'>
- get_expression(expr: Union[lark.tree.Tree, lark.lexer.Token, numbers.Number, str]) Union[int, float, bool, None, str, function][source]
获取表达式的值
- Parameters
表达式树 (expr) –
- Returns
- Return type
表达式运算后的结果。可能是常量,也可能是一个函数
- Raises
SamoyedRuntimeError – 其他运行错误
SamoyedTypeError – 类型错误
- parser = Lark(open('<string>'), parser='lalr', lexer='contextual', ...)
- static reduce(l: list) Optional[numbers.Number][source]
计算形如数值、函数混合列表的值 大致原理是,分为奇数位和偶数位进行计算。 奇数位都是操作数,偶数为都是操作符。
- Parameters
l – 操作数和操作符的序列,形如[1,+,2,-,3]
- Returns
- Return type
运算结果
- Raises
SamoyedRuntimeError – 其他运行错误
SamoyedTypeError – 类型错误
- transformer = <samoyed.core.SamoyedTransformer object>
- class samoyed.core.SamoyedIndenter[source]
Bases:
lark.indenter.Indenter间隔控制 会将若干空格转换_INDENT终结符 如果空格数量不同,转换出的_INDENT也会不同
- CLOSE_PAREN_types = []
- DEDENT_type = '_DEDENT'
- INDENT_type = '_INDENT'
- NL_type = '_NEWLINE'
- OPEN_PAREN_types = []
- indent_level: List[int]
- paren_level: int
- tab_len = 4
samoyed.exception module
- exception samoyed.exception.SamoyedException(message: Optional[str] = None, pos: Optional[Tuple[int, int]] = None)[source]
Bases:
Exception异常基类
- exception samoyed.exception.SamoyedInterpretError(message: Optional[str] = None, pos: Optional[Tuple[int, int]] = None)[source]
Bases:
samoyed.exception.SamoyedException解释时出现的错误基类
- exception samoyed.exception.SamoyedNameError(message: Optional[str] = None, pos: Optional[Tuple[int, int]] = None)[source]
Bases:
samoyed.exception.SamoyedRuntimeError名字错误
- exception samoyed.exception.SamoyedNotFoundEntrance(*args, **kwargs)[source]
Bases:
samoyed.exception.SamoyedInterpretError未找到入口异常
- exception samoyed.exception.SamoyedNotImplementError(*args, **kwargs)[source]
Bases:
samoyed.exception.SamoyedInterpretError未实现方法异常
- exception samoyed.exception.SamoyedRuntimeError(message: Optional[str] = None, pos: Optional[Tuple[int, int]] = None)[source]
Bases:
samoyed.exception.SamoyedException运行时错误基类
- exception samoyed.exception.SamoyedSyntaxError(expected: List[str], t: lark.lexer.Token, pos=None)[source]
Bases:
samoyed.exception.SamoyedInterpretError普通格式错误
- TOKEN_TO_CHINESE = {'$END': 'EOF', 'COMMA': '逗号', 'COMMENT': '注释', 'DOLLAR_VAR': '$变量', 'FLOAT': 'float', 'INT': 'int', 'LESSTHAN': '<=', 'LETTER': '字符', 'LONG_STRING': '跨行字符串', 'MINUS': '-', 'MORETHAN': '>=', 'NAME': '标识符名称', 'PLUS': '+', 'QMARK': '?', 'SLASH': '/', 'STAR': '*', 'STR': 'str', 'STRING': '字符串', '_INDENT': '缩进', '_NEWLINE': '换行'}
- exception samoyed.exception.SamoyedTimeout(message: Optional[str] = None, pos: Optional[Tuple[int, int]] = None)[source]
Bases:
samoyed.exception.SamoyedRuntimeError执行超时
- exception samoyed.exception.SamoyedTypeError(message: Optional[str] = None, pos: Optional[Tuple[int, int]] = None)[source]
Bases:
samoyed.exception.SamoyedRuntimeError类型错误
samoyed.libs module
内置函数
- class samoyed.libs.TimeControl(func, max_wait, min_wait=None, timeout_interval=0.2, sleep_interval=0.2)[source]
Bases:
object返回一个可调用对象,调用该对象会进行延迟 如果主线程先结束,那么会取消计时器; 否则,计时器会杀死主线程
- samoyed.libs.arg_option_add(l: List[Tuple[str, Optional[str], Optional[str]]], full_name: str, shortcut: Optional[str] = None, help_msg: Optional[str] = None)[source]
添加可选参数 :param l: 一个列表 :param full_name: 参数名全称 :param shortcut: 参数名缩写 :param help_msg: 帮助信息
- samoyed.libs.arg_seq_add(l: List[Tuple[str, Optional[str]]], name: str, help_msg: Optional[str] = None)[source]
添加顺序参数 :param l: 一个列表 :param name: 参数名 :param help_msg: 帮助信息
- samoyed.libs.make_arg_parser(pos_arg: Optional[List[Tuple[str, Optional[str]]]] = None, option_arg: Optional[List[Tuple[str, Optional[str], Optional[str]]]] = None, helping_message: Optional[str] = None)[source]
创建一个模式化的命令行参数处理程序 :param pos_arg: 顺序参数,传入的列表内保存2维元组
元组第一个参数是命令行参数名字 第二个参数是帮助信息
- Parameters
option_arg – 可选参数,传入的列表内保存3维元组 元组第一个参数是命令行参数全称 第二个参数是简写 第三个参数是帮助信息
helping_message – 全局帮助信息
- Returns
- Return type
一个命令行参数解析器
- samoyed.libs.mock_add(a: Optional[Union[int, float, bool, str]], b: Optional[Union[int, float, bool, str]]) Optional[Union[int, float, str]][source]
解释器内部使用的加法 python内置的add不支持字符串和数字加法。 这里允许进行这样的操作
- Parameters
a – 参数a
b – 参数b
- Returns
- Return type
a+b的结果
- samoyed.libs.sqlite(conn2curosr: Dict[sqlite3.Cursor, sqlite3.Connection], cursor: sqlite3.Cursor, sql: str) Union[None, List[Any]][source]
执行一条sql指令。 注意,由于脚本语言不支持列表,因此这里把返回结果全部转化成了字符串 :param conn2curosr: 用于绑定cursor和connection的一个字典 :param cursor: 执行指令的cursor :param sql: sql指令
- Returns
- Return type
sql的结果
samoyed.utils module
- samoyed.utils.get_pipe_read_end(name: str) -> (<class 'int'>, typing.Callable)[source]
获取管道的读取端函数 :param name: 管道名 :return: 读取函数
- samoyed.utils.get_pipe_write_end(name: str) Callable[source]
获取管道的写入端函数 :param name: 管道名 :return: 写入函数