我正在尝试使用以下用python编写的代码为输入"[a,b=c,d,e]“生成一个抽象语法树。
语法:
list : '[' elements ']'
elements : element (',' element)*
element : NAME '=' NAME
| NAME
| list抽象语法树代码:
def parse_element(self):
if self.__token_at(1).type == TokenTypes.NAME and self.__token_at(2).type == TokenTypes.EQUALS and self.__token_at(3).type == TokenTypes.NAME:
node = AST(self.__token_at(1))
self.__match(TokenTypes.NAME)
return node
node = AST(self.__token_at(2))
self.__match(TokenTypes.EQUALS)
return node
node = AST(self.__token_at(3))
self.__match(TokenTypes.NAME)
return node
elif self.__token_at(1).type == TokenTypes.NAME:
node = AST(self.__token_at(1))
self.__match(TokenTypes.NAME)
return node
elif self.__token_at(1).type == TokenTypes.LBRACK:
return self.parse_list()输出:期望RBRACK找到<'=',EQUALS> (list <'a',NAME><'b',NAME>)
发布于 2014-06-04 17:44:38
你需要这种格式做什么?它有一些美学上的缺陷,你应该只对一维元素集使用方括号,对于多维元素集,使用花括号,因为它们适合。此外,由于支持空格,因此不需要逗号,它们会增加噪声,并且对解析器没有语法价值。我还看到,值和keyvaluepair存在于同一个包含元素中,这是非常低效的解析,因为解析器无法知道它是否应该在没有反复尝试的情况下读取文本或标识符,此外,将它们放在同一个内部容器中也不是很明智。
关于你发布的代码,它没有什么重要的用处。我建议您在继续学习之前先阅读一个好的JSON解析器的源代码。
https://stackoverflow.com/questions/24031633
复制相似问题