字符语法图的解析思路

2024-10-02 16:28:07 发布

您现在位置:Python中文网/ 问答频道 /正文

各位 我正在实现一个奇怪的东西,我必须编写一个实用程序来解析纯文本格式的语法图并将其转换为xml格式,这件事基本上与IBM提供的相同(如“创建无转换作业”部分): http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls17.htm 像ANTLR/yacc/bison这样的典型的解析器/词法分析器似乎无法处理这类问题,我的一个想法是将语法图转换为字符位图,并定义一些函数,如more_up、move_down、left、right等,以便遍历整个图,以模拟人类肉眼的理解过程。虽然听起来不够熟练,但我没有找到其他更好的方法。 有没有人曾经玩过类似的场景?也许你能帮我解释一下。在

提前谢谢你!在


Tags: 文本格式实用程序comhttp格式作业语法xml
2条回答

我以前从来没有做过这样的事,但我会这样做的。在

首先,我会从以下几点开始:

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]

这样我就可以通过二维坐标访问文本中的字符:

^{pr2}$

(屈服)

Cre
>>

之后,任务将把二维字符网格转换为一维符号序列:

  1. 把标签从第一行读下来
  2. 向下扫描第一列,直到找到>>
  3. 从当前位置向右扫描直到找到[任何]

。。。等等,按眼球顺序看图表。在

一旦你有了1D的符号序列,你就可以使用传统的解析技术了。在

访问单个字符的“字符网格”思想似乎是一个基础步骤; 再给你一个好的答案。现在您可以随意访问网格,并轻松地遵循水平线或垂直线。在

真正的问题是你想要构造一个表示字符网格所表示内容的图形。这样的图形将由(duh)、节点、弧和注释组成。在

可能最容易找到的是节点,这些节点可能由表示图中分支点的字符表示(参见其他答案)(例如+)。每个弧将是一系列字符,导致弧中的弯板或另一个节点。在这样的字符串后面应该非常笔直(:-),并且可以生成一个表示弧的字符串,即使它有弯曲。在

您可能需要枚举所有节点(只需扫描阵列)。节点批注 必须合理地在附近,你可以简单地扫描一个小半径周围的节点位置。在

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

我将把这个弧字符串交给lexer以将其分开;它可能有有趣的内容(例如,在内联字符序列中的注释)。在

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

相关问题 更多 >