Python——词法分析和标记化

2024-02-29

我希望加快我的发现过程,因为这是我第一次涉足词法分析领域。也许这甚至是一条错误的道路。首先,我将描述我的问题:

我有非常大的属性文件(大约 1,000 个属性),经过提炼后,实际上只有大约 15 个重要属性,其余属性可以生成或很少更改。

因此,例如:

general {
  name = myname
  ip = 127.0.0.1
}

component1 {
   key = value
   foo = bar
}

这是我想要创建的格式类型,用于标记如下内容:

property.${general.name}blah.home.directory = /blah
property.${general.name}.ip = ${general.ip}
property.${component1}.ip = ${general.ip}
property.${component1}.foo = ${component1.foo}

into

property.mynameblah.home.directory = /blah
property.myname.ip = 127.0.0.1
property.component1.ip = 127.0.0.1
property.component1.foo = bar

词法分析和标记化听起来是我的最佳途径,但这是它的一种非常简单的形式。这是一个简单的语法,一个简单的替换,我想确保我没有用大锤敲钉子。

我可以创建自己的词法分析器和分词器,或者 ANTlr 也是一种可能性,但我不喜欢重新发明轮子,而且 ANTlr 听起来有点矫枉过正。

我不熟悉编译器技术,因此非常感谢正确方向和代码的指针。

Note: 我可以改变输入格式。


有一篇很棒的文章使用正则表达式进行词法分析 http://effbot.org/zone/xml-scanner.htm at effbot.org http://effbot.org/.

使分词器适应您的问题:

import re

token_pattern = r"""
(?P<identifier>[a-zA-Z_][a-zA-Z0-9_]*)
|(?P<integer>[0-9]+)
|(?P<dot>\.)
|(?P<open_variable>[$][{])
|(?P<open_curly>[{])
|(?P<close_curly>[}])
|(?P<newline>\n)
|(?P<whitespace>\s+)
|(?P<equals>[=])
|(?P<slash>[/])
"""

token_re = re.compile(token_pattern, re.VERBOSE)

class TokenizerException(Exception): pass

def tokenize(text):
    pos = 0
    while True:
        m = token_re.match(text, pos)
        if not m: break
        pos = m.end()
        tokname = m.lastgroup
        tokvalue = m.group(tokname)
        yield tokname, tokvalue
    if pos != len(text):
        raise TokenizerException('tokenizer stopped at pos %r of %r' % (
            pos, len(text)))

为了测试它,我们这样做:

stuff = r'property.${general.name}.ip = ${general.ip}'
stuff2 = r'''
general {
  name = myname
  ip = 127.0.0.1
}
'''

print ' stuff '.center(60, '=')
for tok in tokenize(stuff):
    print tok

print ' stuff2 '.center(60, '=')
for tok in tokenize(stuff2):
    print tok

for:

========================== stuff ===========================
('identifier', 'property')
('dot', '.')
('open_variable', '${')
('identifier', 'general')
('dot', '.')
('identifier', 'name')
('close_curly', '}')
('dot', '.')
('identifier', 'ip')
('whitespace', ' ')
('equals', '=')
('whitespace', ' ')
('open_variable', '${')
('identifier', 'general')
('dot', '.')
('identifier', 'ip')
('close_curly', '}')
========================== stuff2 ==========================
('newline', '\n')
('identifier', 'general')
('whitespace', ' ')
('open_curly', '{')
('newline', '\n')
('whitespace', '  ')
('identifier', 'name')
('whitespace', ' ')
('equals', '=')
('whitespace', ' ')
('identifier', 'myname')
('newline', '\n')
('whitespace', '  ')
('identifier', 'ip')
('whitespace', ' ')
('equals', '=')
('whitespace', ' ')
('integer', '127')
('dot', '.')
('integer', '0')
('dot', '.')
('integer', '0')
('dot', '.')
('integer', '1')
('newline', '\n')
('close_curly', '}')
('newline', '\n')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python——词法分析和标记化 的相关文章

  • 使用 pythonbrew 编译 Python 3.2 和 2.7 时出现问题

    我正在尝试使用构建多个版本的 python蟒蛇酿造 http pypi python org pypi pythonbrew 0 7 3 但我遇到了一些测试失败 这是在运行的虚拟机上 Ubuntu 8 04 32 位 当我使用时会发生这种情
  • 使用 psycopg2 在 python 中执行查询时出现“编程错误:语法错误位于或附近”

    我正在运行 Python v 2 7 和 psycopg2 v 2 5 我有一个 postgresql 数据库函数 它将 SQL 查询作为文本字段返回 我使用以下代码来调用该函数并从文本字段中提取查询 cur2 execute SELECT
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • 检查一个列表是否是 pandas Dataframe 中另一个列表的子集

    所以 我有这个包含近 3000 行的 Dataframe 看起来像这样 CITIES 0 A B 1 A B C D 2 A B C 4 X 5 X Y Z 2670 Y Z 我想从 DF 中删除 CITIES 列表包含在另一行中的所有行
  • 如何在 phantomJS 中执行 jQuery Promise?

    我正在尝试在服务器端使用 nodejs 和 phantomjs 来对我们的网站进行 SEO 虽然 ajax 工作正常 但我无法执行我在代码中使用的自定义承诺 我如何让 phantomJS 等到承诺得到解决 下面是我编码的内容 body ad
  • 将 Android 项目档案导入 Eclipse 时出现问题

    如果这是一个愚蠢的新手问题 我很抱歉 我正在使用 Eclipse Helios 版本 并按照developer android com 的建议配置了 Android SDK 我可以毫无问题地创建和运行新项目 但无法使用 导入 gt 将现有项
  • opencv:将标量转换为浮点或双精度类型

    谁能帮我将 openCV 的标量类型转换为 float 或 double 等基本类型 Scalar Sum1 sum arg1 Sum2 sum arg2 theta at
  • 包装单张 - 地图未显示

    我对 Rstudio 中使用的 传单 包有一些疑问 我的问题是 底图没有显示 但在查看器的底部写着 OpenStreeMap 并且还显示了放大和缩小的选项 有人知道这个问题吗 library leaflet m lt leaflet m l
  • 自定义验证器不显示错误消息

    我有一个要求 需要多个字段之一 使用自定义验证器 偶数会触发 返回 false 但不会显示错误消息并且表单会验证 我缺少什么 我尝试过使用和不使用 ValidationSummary Thanks
  • 更新 JList

    我现在制作了一个基于数组列表的 JList 并由 defaultlistmodel 填充 该列表会在连接到服务器时添加人员 但不会显示连接的人员或之后连接的人员 所以 我必须更新 JList 我的问题是 我应该更新什么 是否可以使用运行更新
  • 带标签的维基数据 SPARQL 查询不起作用

    我不明白为什么通过这个查询我无法获得运动和流派标签 SELECT DISTINCT item itemLabel value inception creatorLabel image group concat genreLabel sepa
  • 如何动态导入 python 模块函数?

    假设my function 位于 my apps views 我想导入my function动态地不使用类似的东西exec or eval 有什么办法可以实现这一点吗 我想做类似的事情 my function import func my
  • 如何在msbuild文件中给出相对路径?

    我正在编写一个 msbuild 文件来使用 galio 运行测试 现在 我需要给出
  • 如何在汇编中通过字符串进行索引

    给定变量 var1 db abcdefg NULL 我将如何执行循环来导航每个字母 在 C 中 您可以在循环内执行类似 var x 的操作 然后每次递增 x 有任何想法吗 在 C 和 C 中 字符串以 NUL 结尾 这意味着将 ASCII
  • 我可以向量化这个Python代码吗?

    我编写了这段 python 代码来获取标签的邻居 一组共享一些公共属性的像素 标签的邻居被定义为位于边界另一侧的其他标签 相邻标签共享边界 所以 我写的代码可以工作 但速度非常慢 segments It is a 2 dimensional
  • 删除 sourceSets.main.runtimeClasspath 中的 jar

    我的 gradle 中有这个 sourceSets main compileClasspath configurations provided runtimeClasspath configurations provided test co
  • 从选择框中删除重复条目

    我如何使用 jQuery 删除重复项
  • 如何制作在 iOS 上的 VLC 中播放的音乐文件的 URL?

    我想通过我的网站向 iPhone 和 iPad 用户提供 MP3 和其他文件格式 VLC 的 iOS 应用程序似乎符合要求 但他们说 Additionally third party websites and apps may includ
  • 从 VBA 项目中删除密码

    如何以编程方式从 Excel VBA 项目中删除 已知 密码 需要明确的是 我想从 VBA 项目中删除密码 而不是从工作簿或任何工作表中删除密码 删除 VBA 项目密码的另一种方法是 使用十六进制编辑器打开 xls 文件 即十六进制编辑ht
  • 如何调试 Captive Portal 中的浏览器?

    强制门户有一个浏览器 当您尝试连接到无线网络时 该浏览器有时会打开 有谁知道我该如何调试它 我已经尝试过的 我尝试运行模拟器 但模拟器无法打开门户 我尝试过将 iPhone 连接到我的 Mac 并使用 Safari 开发进行调试 但这仅在
  • 如何在雪豹上安装gem pg

    我需要在雪豹上安装 gem pg 因为我正在 Rails 代码库上运行 rake 我没有使用 postgres 这是我收到的错误 sudo gem install pg Password Sorry try again Password B
  • 自动映射器有什么用?

    What s 自动映射器 http www codeplex com AutoMapper for 它将如何帮助我处理域和控制器层 asp net mvc 也许一个例子会有所帮助 假设您有一个很好标准化的数据库模式 如下所示 Orders
  • Python——词法分析和标记化

    我希望加快我的发现过程 因为这是我第一次涉足词法分析领域 也许这甚至是一条错误的道路 首先 我将描述我的问题 我有非常大的属性文件 大约 1 000 个属性 经过提炼后 实际上只有大约 15 个重要属性 其余属性可以生成或很少更改 因此 例