Python 3.6+的语法、解析器和编译器
项目描述
简单的Python编译器,用于娱乐和盈利。
本项目包含的语法示例
如果您想重用示例代码,请随意将代码复制到您的项目中,但不要将示例代码作为依赖引入,因为示例代码可能会被修改或删除而不另行通知。仅通过扩展shreducer包中提供的类来构建您自己的语法和相关类。
Python 3.6+类型提示字符串表示
Web API的过滤表达式。允许解析如下表达式: https://your.api?filter=(status eq open and type eq store) or (status eq closed and type not in office, garage)
包含Elasticsearch查询编译器(自2016年以来未测试)
一些基本算术表达式的原始语法作为示例
组件
分词器(无需自行实现,我们依赖于Python标准库中的shlex)
语法
解析器(无需自行实现,我们使用移位-归约解析器,因此项目名称为shreducer)
生成器
分词器将输入字符串分割成语法的词素单元(我们在这里称它们为标记)。
语法描述了我们想要解析的语言的语法规则。
解析器解析标记序列并生成解析树。例如('+', 2, ('-', 10, 3))可能是一个解析树。
生成器接收一个解析树并对其进行评估。例如,一个算术生成器可以接收一个解析树('+', 2, ('-', 10, 3))作为输入,并产生9作为输出。
所有这些组件共同构成一个编译器。
表达新的语法
请参阅shreducer_examples/下的示例
DictG - 所有语法中最简单的一种,最适合理解基本概念,解析器生成解析字典
ListG - 另一种简单的语法,但与字典语法不同,这种语法解析器的输出是解析树
PlusMinusArithmeticsG - 简单的算术表达式解析器,解析器生成解析树
BetterArithmeticsG - 遵守操作符优先级的算术表达式解析器,解析器生成解析树
FilterExpressionsG - 比较运算符和逻辑运算符,解析器生成解析树
BetterFiltersG - 比较丰富的过滤表达式语言,与其它语法不同,这个语法使用前瞻,解析器生成解析树
TypeHintsG - 解析 Python 3.6+ 类型提示字符串表示形式
在t类中存在一些魔法(一个元类),允许声明一个字符串常量而无需将其值写两次
class MyGrammar(Grammar):
class t:
IDENT = None
PLUS_MINUS = '+-'
EXPR = ()
创建MyGrammar类后,MyGrammar.t.IDENT的值将是"IDENT"。同样,MyGrammar.t.PLUS_MINUS将是"PLUS_MINUS",而MyGrammar.t.EXPR将是"EXPR"。
class t的成员值为None时被视为默认令牌类型。
class t的成员值为()时被视为高级令牌(表达式)的名称。
测试您的新的语法
如果您只实现了一个语法,您可以使用Grammar.simple_parse(这是一个类方法)尝试解析输入字符串。
例如,要尝试TypeHintsG(Python 3.6+ 类型提示字符串表示形式的语法),您可以这样做
print(TypeHintsG.simple_parse('typing.Union[typing.List[str], typing.Dict[str, int]]'))
这将产生以下解析树
{
"name": "typing.Union",
"args": [
{
"name": "typing.List",
"args": [
{"name": "str", "args": None},
],
},
{
"name": "typing.Dict",
"args": [
{"name": "str", "args": None},
{"name": "int", "args": None},
],
},
],
}
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
shreducer-1.0.1.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 35d35ab034c14517ec2ecc6d5b483b519b59d40ceb01e7f660fe402bf6e1a81b |
|
MD5 | 5ab30f29481e5e0a8ca38623c727e45b |
|
BLAKE2b-256 | ac25c65af496d49dea8c2530822f966855a55ce08d62d73c400286aa6b332c9f |
shreducer-1.0.1-py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 346fb326ff3efe8de246b909e5dbf2694837508a9437c0bf08600076b908bc24 |
|
MD5 | 9e605d3d1a3de5c0056c26f7990a2adc |
|
BLAKE2b-256 | 4527942ca9a59e030c44fc0c1e58f7db67ff96c6ff07841cf3fccff63eca62fc |