3

我想从头开始为 python 编写一个词法分析器。但我不知道从哪里开始以及如何开始。对于初学者,我想假设我们将有一个 python 程序作为一组传递给分析器的字符串。分析器应该找出新行在哪里以及要查看的适当空格。如何找出python源代码中的新行?我已经阅读了 python 的词汇规范,我们可以使用基于堆栈的方法来解决带有空格的缩进,但不知道如何查看。它只是用 '\n' 进行正则表达式检查还是有任何算法确定这一点的方法?

我故意不想使用 lex、yacc 或 flex 之类的东西。

4

1 回答 1

1

我最近开发了一个用于查找 SQL 语句的解析器。我知道规则不同,但方法可能相似。我使用python开发解析器。第一步是查找标记开头的正则表达式。然后我将该列表传递给一个有限状态机,该状态机确定令牌代表的内容。

规则需要考虑换行符、分号和字符串以及可以跨行的注释。在 python 中,你会更关心换行和缩进。

一旦您能够解析出单个语句,那么您应该将它们传递给可以解析语句的函数,它可能会采用类似的方法。

您可以在https://github.com/PeterWooster/SQL-Tools/blob/master/SQLStatements.py找到 SQL 解析器。这说明了查找令牌并使用 FSM 处理它们的方法。是的,它处理跨越换行符的字符串。

于 2013-01-20T22:35:10.727 回答