首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AST,抽象语法树,是由语言还是由前端定义的?

AST,抽象语法树,是由语言还是由前端定义的?
EN

Stack Overflow用户
提问于 2021-11-09 09:32:15
回答 1查看 159关注 0票数 1

在过去的几周里,我一直在试验AST和Clang,尤其是clang。

Clang提供了一些类和与AST交互的方式,但我不明白的是,如果我经常使用的clang::VarDecl是由Clang的创建者或语言的创建者命名和创建的。

是谁决定把它叫做VarDecl?

我的意思是,AST (和它的所有元素)是来自语言发明者的头脑吗?各种各样的前端只是根据他/她编写的文档来创建类,或者每个前端都可能创建给定源代码的AST,所以Clang的和GCC的不一样吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-09 10:03:07

是AST,抽象语法树,由语言定义。

不完全。C++语言标准中的每个定义都有一个简短的语法符号,并且有一个信息丰富的附件,附带语法摘要。但附件指出,https://eel.is/c++draft/gram

这个C++语法摘要是为了帮助理解。这并不是语言的确切表述。特别是,这里描述的语法接受一个有效C++结构的超集。..。

标准变量声明中的语法中没有VarDecl,只有对简单申报的一种解释。

还是在前面?

编译器的内部,如果它有一个前端,或者没有,它有3个或1000个阶段,都是编译器实现的一部分。从语言的角度来看,只要正确翻译有效的程序,编译器就可以以它想要的任何方式实现。一般来说,语言指定什么时候发生,而不是如何发生。

因此,要回答这个问题,AST (如果以任何形式使用)是由编译器定义的。

是谁决定把它叫做VarDecl?

我很可能怀疑https://github.com/llvm/llvm-project/commit/a11999d83a8ed1a2661feb858f0af786f2b829ad的克里斯·拉特纳。

这来自于语言发明者的头脑,而各种前端只是创建以他/她编写的文档命名的类,或者每个前端都可能创建给定源代码的AST,所以Clang和GCC的类是不同的吗?

当然,它们受到标准中的内容的影响,但是每个编译器都有自己的内部结构。总之,Clang VarDecl和GCC VAR_DECL是不同的,它们在概念上也是不同的--假设GCC使用switch(...) case VAR_DECL:,Clang使用类clang::VarDecl

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

https://stackoverflow.com/questions/69895732

复制
相关文章

相似问题

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