我想从头开始为python编写一个词法分析器。但我不知道在哪里以及如何开始。对于初学者,我想假设我们将python程序作为传递给分析器的一组字符串。分析器应该找出新行的位置以及要查看的适当空格。如何在python源代码中找出新行?我已经阅读了python的词法规范,我们可以使用基于堆栈的方法来解析带有空格的缩进,但无法确定如何查看。它只是用'\ n'进行正则表达式检查,还是有任何算法确定这个的方法?
我故意不想使用像lex,yacc或flex这样的东西。
答案 0 :(得分:1)
我最近开发了一个用于查找SQL语句的解析器。我知道规则不同,但方法可能类似。我使用python开发解析器。第一步是一个正则表达式,它找到了令牌的开头。然后我将该列表传递给有限状态机,该机器确定了令牌所代表的内容。
规则需要考虑换行符,分号和字符串以及可以跨越行的注释。在python中,你会更关注换行和缩进。
一旦你能够解析出单个语句,那么你应该将它们传递给一个可以解析语句的函数,它可能采取类似的方法。
您可以在https://github.com/PeterWooster/SQL-Tools/blob/master/SQLStatements.py找到SQL解析器。这说明了查找令牌的方法,并使用FSM来处理它们。是的,它处理跨越换行符的字符串。