Python 解析字符语法图的思路
乡亲们 我正在实现一个奇怪的东西,我必须编写一个实用程序来解析纯文本格式的语法图并将其转换为xml格式,这个东西基本上与IBM的相同(如“创建无转换作业”部分): 像ANTLR/yacc/bison这样的典型解析器/词法分析器似乎无法处理此类内容,我的一个想法是将语法图转换为字符位图,并定义一些函数,如more_up、move_down、left、right等,以便遍历整个图,模拟人类肉眼的理解过程。虽然听起来不够熟练,但我没有找到其他更好的方法。 有人玩过类似的游戏吗?也许你可以解释一下Python 解析字符语法图的思路,python,xml,parsing,Python,Xml,Parsing,乡亲们 我正在实现一个奇怪的东西,我必须编写一个实用程序来解析纯文本格式的语法图并将其转换为xml格式,这个东西基本上与IBM的相同(如“创建无转换作业”部分): 像ANTLR/yacc/bison这样的典型解析器/词法分析器似乎无法处理此类内容,我的一个想法是将语法图转换为字符位图,并定义一些函数,如more_up、move_down、left、right等,以便遍历整个图,模拟人类肉眼的理解过程。虽然听起来不够熟练,但我没有找到其他更好的方法。 有人玩过类似的游戏吗?也许你可以解释一下 提前
提前谢谢你 我以前从未做过这样的事情,但我会这样做 首先,我要从以下内容开始:
class CharGrid(object):
def __init__(self, text):
self.lines = text.split('\n')
def __getitem__(self, pos):
try:
col, row = pos
except (TypeError, ValueError):
raise KeyError('%r not a 2-tuple' % (pos,))
if row >= len(self.lines):
return ' '
line = self.lines[row]
if col >= len(line):
return ' '
return line[col]
这样我就可以通过二维坐标访问文本中的字符:
grid = CharGrid("""Creating a No-Conversion Job
>>-onpladm create job--job--+--------------+-- -n--------------->
'- -p--project-'
>-- -d--device-- -D--database-- -t--table----------------------->
.---------------------------------------------------------------------.
V |
>----+-----------------------------------------------------------------+-+-><
| (1) |
'-+-------------+--+-------------+--| Setting the Run Mode |------'
'- -S--server-' '- -T--target-'
""")
print ''.join((grid[0,0], grid[1,0], grid[2,0]))
print ''.join((grid[0,2], grid[1,2]))
在此之后,任务将是将二维字符网格转换为一维符号序列:
>
此时,节点和圆弧具有关联的注释。从这些构造相应的图形应该是很容易的。 Matt,感谢这些非常整洁的代码,有一些事情我仍然需要考虑,比如对可选/强制参数和参数名/值的确定是明智的,你的类是一个好的开始:IRAA,你的方法是完全有意义的。而其他一些似乎也需要考虑。与某些弧一样,弧是不可拓扑移动的(它们意味着可选或强制性参数),因此,如果当前节点位于主干或分支上,或者嵌套的深度有多深,解析器必须能够感知。我的感觉是,从左到右遍历节点将需要更少的努力,编码来找出这些。。。
Cre
>>