首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"[a,b=c,[d,e]]“的抽象语法树

"[a,b=c,[d,e]]“的抽象语法树
EN

Stack Overflow用户
提问于 2014-06-04 15:37:33
回答 1查看 244关注 0票数 0

我正在尝试使用以下用python编写的代码为输入"[a,b=c,d,e]“生成一个抽象语法树。

语法:

代码语言:javascript
复制
list     : '[' elements ']'
elements : element (',' element)*
element  : NAME '=' NAME
         | NAME
         | list

抽象语法树代码:

代码语言:javascript
复制
 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>)

EN

回答 1

Stack Overflow用户

发布于 2014-06-04 17:44:38

你需要这种格式做什么?它有一些美学上的缺陷,你应该只对一维元素集使用方括号,对于多维元素集,使用花括号,因为它们适合。此外,由于支持空格,因此不需要逗号,它们会增加噪声,并且对解析器没有语法价值。我还看到,值和keyvaluepair存在于同一个包含元素中,这是非常低效的解析,因为解析器无法知道它是否应该在没有反复尝试的情况下读取文本或标识符,此外,将它们放在同一个内部容器中也不是很明智。

关于你发布的代码,它没有什么重要的用处。我建议您在继续学习之前先阅读一个好的JSON解析器的源代码。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24031633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档