ply解析多行块

时间:2015-02-27 14:47:13

标签: python parsing multiline ply

我想用ply解析包含以下内容的文件:

option "option1 name"
option "option2 name"
variable1
{
    name: "var1"
    size: 5
}

其中选项名称 size 是关键字,但变量直接列出,没有任何关键字,并且它们在{}内有属性。

问题在于这个多行变量声明,我无法解决。当解析器获取" variable1"时,它会抛出EOF错误。如果我在一行中给出变量声明,那么就可以了,如下所示:

variable1 { name: "var1" }

我应该如何为此编写词法分析器?我必须使用状态吗?我是否错误地处理换行?

我的目标是从中获取一个python字典,例如:

{'variable1': {'name': 'var1', 'size': 5}}

感谢您的任何提示!

1 个答案:

答案 0 :(得分:0)

我猜你正在阅读input()(或raw_input() for python 2)。刚刚遇到同样的事情。 input()只读一行。即使你粘贴了

variable1
{
    name: "var1"
    size: 5
}

读入的字符串是"variable1"。你可以做这样的事情作为一种解决方法:

userinput = ''
line = input('> ')
while line != '':
    userinput += line
    line = input()

# pass `userinput` to your parser

完成阻止后,按两次Enter键。它应该有完整的字符串。