问题 关于Python解析器生成器的建议


嘿伙计们,这是我在Stack Overflow上的第一个问题,我想知道我是否可以向那些比我更了解Python和Parser Generators的人提出建议。

我得到了一个任务,我必须为一个简单的类C语言创建一个解析器。我可以使用任何编程语言和工具,我希望创建解析器,但我同时学习Python,所以这将是我的首选。

我的Parser必须遵循一些限制。首先,它必须能够读入包含以下信息的文本文件:

kind1 : spelling1
kind2 : spelling2
kind3 : spelling3
      .
      .
      .
kindn : spellingn

每种类型和拼写都指代语言的标记类型和值。该文件是通过语言的词法分析器放置代码示例的结果。

其次,我必须能够自定义解析器的输出。理想情况下,我想输出一个已将类型:拼写列表转换为另一个令牌序列的文件,这些令牌将传递给语言的编译器以转换为MIPS汇编代码。这是我希望解析器能够生成的那种事情的一个小例子:

%function int test
  %variable int x
  %variable int y
%begin
  %if %id y , %id x > %do
  %begin
    %return %num 0
  %end
  %return %num 1
%end

如果有人可以就现有的Python解析器生成器提供建议,并且如果我能够在上面的示例中实现我正在寻找的那种东西,那将是一个很大的帮助。


10773
2017-11-21 17:50


起源



答案:


PyParsing 是一个生成解析器的python工具。有一个 很多有趣的例子

易于上手:

from pyparsing import Word, alphas

# define grammar
greet = Word( alphas ) + "," + Word( alphas ) + "!"

# input string
hello = "Hello, World!"

# parse input string
print hello, "->", greet.parseString( hello )

10
2017-11-21 17:51





它看起来像一个 pyparsing 为我工作。而且它也可以相对容易地操作输出。


5
2017-11-21 17:54



谢谢你的建议。我当然会看看PyParsing。 - greenie


答案:


PyParsing 是一个生成解析器的python工具。有一个 很多有趣的例子

易于上手:

from pyparsing import Word, alphas

# define grammar
greet = Word( alphas ) + "," + Word( alphas ) + "!"

# input string
hello = "Hello, World!"

# parse input string
print hello, "->", greet.parseString( hello )

10
2017-11-21 17:51





它看起来像一个 pyparsing 为我工作。而且它也可以相对容易地操作输出。


5
2017-11-21 17:54



谢谢你的建议。我当然会看看PyParsing。 - greenie


我建议您查看Lark: https://github.com/erezsh/lark

它可以解析所有无上下文的语法,它会自动构建一个AST(带有行号和列号),并且它接受EBNF格式的语法,这种语法很容易编写并且被认为是标准语法。


1
2018-03-16 17:42