compiler-construction - 什么是语言前端?
问题描述
我对编程语言和编译器上下文中前端和后端的定义感到困惑。
LLVM 编译器基础设施项目是一组编译器和工具链技术,可用于开发任何编程语言的前端和任何指令集架构的后端。
当我搜索“编程语言前端”时,我发现的只是 HTML CSS JS,我知道这不是它在这种情况下所指的。谁能向我解释或指导我找到正确的资源?
解决方案
编译器的前端是编译器的一部分,它从原始源代码开始,并以该程序“含义”的某种内部表示结束,以某种格式存储,使编译器的其余部分能够理解该结构并开始生成代码。它是(通常)完成扫描、解析和语义分析的地方。
编译器的后端是编译器的一部分,它采用内部表示并使用它以某种格式(汇编、机器代码、JVM 字节码、LLVM 位码等)生成代码。它通常处理诸如优化、指令之类的事情。选择,寄存器分配等。
一些编译器将这两个部分分解为逻辑上独立的组件。有时它们是交织在一起的。LLVM 的部分目标是让你可以为一种新语言构建前端,然后将其连接到现有的后端,这样你就可以设计一种新语言并获得其他人拥有的所有出色的优化工作完成,或者为现有前端构建新的后端,以防您想使用新的分析来分析以某种现有语言编写的程序。
推荐阅读
- ios - 我如何将 sms 中的代码自动填充到 6 个 UITextfields 中,每个 UITextfields 包含 1 个数字
- api - microsoft-teams 从过去的会议中创建会议统计信息
- c# - Xamarin Forms UWP 应用在发布商店文件后行为异常
- flutter - Flutter - 如何在传递值的同时从子级更改父级的主体小部件?
- ios - AppStoreConnect 订阅价格未显示
- laravel - Laravel 请求验证 required_if 有多个条件
- c# - 使用 gridview 字段中的按钮单击更新 SQL Server 表列
- azure - 是否可以将 Windows 事件日志纳入应用程序洞察力?
- java - 错误:找不到合适的方法添加(字符串,类
) - android - React Native CodePush 更新问题