Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解析字符语法图的思路_Python_Xml_Parsing - Fatal编程技术网

Python 解析字符语法图的思路

Python 解析字符语法图的思路,python,xml,parsing,Python,Xml,Parsing,乡亲们 我正在实现一个奇怪的东西,我必须编写一个实用程序来解析纯文本格式的语法图并将其转换为xml格式,这个东西基本上与IBM的相同(如“创建无转换作业”部分): 像ANTLR/yacc/bison这样的典型解析器/词法分析器似乎无法处理此类内容,我的一个想法是将语法图转换为字符位图,并定义一些函数,如more_up、move_down、left、right等,以便遍历整个图,模拟人类肉眼的理解过程。虽然听起来不够熟练,但我没有找到其他更好的方法。 有人玩过类似的游戏吗?也许你可以解释一下 提前

乡亲们 我正在实现一个奇怪的东西,我必须编写一个实用程序来解析纯文本格式的语法图并将其转换为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]))
在此之后,任务将是将二维字符网格转换为一维符号序列:

  • 从第一行读出标签
  • 向下扫描第一列,直到找到
    >
  • 从当前位置向右扫描,直到找到[任何内容]
  • 。。。等。按照图表中的眼球顺序

    <1>一旦你有一个一维的符号序列,你就可以使用一个常规的解析技术。

    < P>访问单个字符的“字符网格”思想似乎是一个基础步骤; 另一个答案说明了如何做到这一点。现在,您可以随机访问网格,并轻松地沿着水平线或垂直线进行操作

    真正的问题是,您想要构造一个表示角色网格所说内容的图形。这样的图形将由(duh)、节点、圆弧和注释组成

    可能最容易找到的是节点,它们可能由表示图中分支点的字符表示(参见其他答案)(例如+)。每个弧都是一组字符,它们指向弧中的一个弯曲或另一个节点。跟随这样的字符串应该是非常严格的(:-),并且可以生成表示弧的字符串,即使弧中有弯曲

    您可能希望枚举所有节点(只需扫描数组)。节点注释 必须在附近,您只需在节点位置周围扫描一个小型无线传感器即可

    您需要枚举离开节点的每个弧,并收集表示该弧的字符串

    我会把弧线喂给雷克瑟,把它撕开;它可能有有趣的内容(例如,内联字符序列中的注释)


    此时,节点和圆弧具有关联的注释。从这些构造相应的图形应该是很容易的。

    Matt,感谢这些非常整洁的代码,有一些事情我仍然需要考虑,比如对可选/强制参数和参数名/值的确定是明智的,你的类是一个好的开始:IRAA,你的方法是完全有意义的。而其他一些似乎也需要考虑。与某些弧一样,弧是不可拓扑移动的(它们意味着可选或强制性参数),因此,如果当前节点位于主干或分支上,或者嵌套的深度有多深,解析器必须能够感知。我的感觉是,从左到右遍历节点将需要更少的努力,编码来找出这些。。。
    Cre
    >>