Skip to main content

一个通用的基于模式的 Lexer/tokenizer 工具。

项目描述

通用词法分析器

图片 图片 图片 图片 图片

一个通用的基于模式的 Lexer/tokenizer 工具。

最低python版本是3.6

原作者
Eli Bendersky这个要点最后一次修改于 2010/08
维护者
Leandro Benedet Garcia最后一次修改于 2020/11
版本
1.1.0
执照
无牌
文档
文档可以在 这里找到

例子

如果我们尝试执行以下代码:

from generic_lexer import Lexer


rules = {
    "VARIABLE": r"(?P<var_name>[a-z_]+): (?P<var_type>[A-Z]\w+)",
    "EQUALS": r"=",
    "SPACE": r" ",
    "STRING": r"\".*\"",
}

data = "first_word: String = \"Hello\""
data = data.strip()

for curr_token in Lexer(rules, False, data):
    print(curr_token)

会给我们以下输出:

VARIABLE({'var_name': 'first_word', 'var_type': 'String'}) at 0
SPACE( ) at 18
EQUALS(=) at 19
SPACE( ) at 20
STRING("Hello") at 21

正如您所看到的与原始要点不同,我们能够为每个令牌指定多个组。您不能使用同一组两次,无论是否每个标记,因为所有正则表达式模式都合并在一起以稍后生成标记。

您可以通过以下方式获取令牌的值:

>>> from generic_lexer import Lexer
>>> rules = {
...     "VARIABLE": r"(?P<var_name>[a-z_]+): (?P<var_type>[A-Z]\w+)",
...     "EQUALS": r"=",
...     "STRING": r"\".*\"",
... }
>>> data = "first_word: String = \"Hello\""
>>> variable, equals, string = tuple(Lexer(rules, True, data))

>>> variable
VARIABLE({'var_name': 'first_word', 'var_type': 'String'}) at 0

>>> variable.val
{'var_name': 'first_word', 'var_type': 'String'}
>>> variable["var_name"]
'first_word'
>>> variable["var_type"]
'String'

>>> equals
EQUALS(=) at 19

>>> equals.val
'='

>>> string
STRING("Hello") at 21

>>> string.val
'"Hello"'

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

generic_lexer-1.1.1.tar.gz (7.6 kB 查看哈希

已上传 source

内置分布

generic_lexer-1.1.1-py2.py3-none-any.whl (7.5 kB 查看哈希

已上传 py2 py3