使用pypeg2时遇到“name undefined”错误

时间:2014-11-12 10:38:39

标签: python parsing peg

我想使用pypeg2来解析c#代码。所以我必须首先定义C#语法。我对解析表达式语法(PEG)知之甚少,并假设它与Backus-Naur形式(BNF)有很多共同之处。 BNF允许递归,所以我定义了这样的语法:

from __future__ import unicode_literals,print_function
from pypeg2 import *


class Instruction(list):
    grammar = Enum(word,IfDefinition),";",endl

class IfDefinition(list):
    grammar = "if",block,"else",block

block = "{",maybe_some(Instruction),"}"

当我尝试执行代码时,我遇到了错误“NameError:name'FifDefinition'未定义”。如果在定义它之前我没有使用“IfDefinition”,我就无法构造多层嵌套的“IfDefinition”。我想知道如何使用pypeg2定义if表达式的语法。

1 个答案:

答案 0 :(得分:1)

看起来你有一个周期,(Instruction引用IfDefinitionIfDefinition引用blockblock引用Instruction。)< / p>

我认为您可能需要重新考虑您使用的模型,或者可能的,稍微混乱的解决方案

class Instruction(list):
    pass

block = "{",maybe_some(Instruction),"}" 

class IfDefinition(list):
    grammar = "if",block,"else",block

Instruction.grammar = Enum(word,IfDefinition),";",endl