【发布时间】:2011-01-22 11:12:27
【问题描述】:
我希望在这里加快我的发现过程,因为这是我第一次涉足词法分析领域。也许这甚至是错误的道路。首先,我将描述我的问题:
我有非常大的属性文件(大约 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}
进入
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 听起来有点矫枉过正。
我不熟悉编译器技术,因此非常感谢您提供正确方向和代码的指针。
注意:我可以更改输入格式。
【问题讨论】:
-
为什么不使用 JSON 而不是创建自己的解析器??
-
您的示例翻译似乎有一些错误。如果不是,我看不出为什么在示例的第 3 行中“${component1}.ip”被翻译成“component1”。如果语法是常规的,我可能会用正则表达式删除 ${identifiers} 并将它们替换为在没有字典条目时通过的字典查找。
-
这里有几个错误,我想我已经纠正了。
标签: python transform lexical-analysis