1、“编译原理”是大学计算机类专业的一门主干课程。设置本课程的目的,在于系统的向学生讲述编译系统的结构、工程流程以及编译程序各组成部分的设计原理和实现技术,使学生通过本课程的学习,既掌握编译理论和方法方面的基本知识,而且也获得设计、实现、分析和移植编译程序方面的初步能力。全书共10章,内容包括语言及文法的基本知识、词法分析、语法分析、语义分析及中间代码生成、符号表组织、运行时的存储组织与分配、代码优化及目标代码生成等。
2、“编译原理”这门课是一门真正与代码做斗争的课程,对于一个有至于追求技术的人是不容错过的课程,而且编译原理可以说是一个计算机科学的缩影。编译原理学过之后的益处包括:可以更加容易的理解在一个语言种哪些写法是等价的,哪些是有差异的;可以更加客观的比较不同语言的差异;更不容易被某个特定语言的宣扬者忽悠;学习新的语言是效率也会更高;其实从语言a转换到语言b是一个通用的需求,学好编译原理处理此类需求时会更加游刃有余。
3、学习编译原理的一个办法就是安静下来,耐耐心心的读一本经典的编译原理教材,然后做完每一道习题,随后再自己编写一个玩具编译器,可以借助LLVM的力量轻易达到这一点。对于普通程序员,编译原理这门课主要掌握几点就够用了:词法分析方面,掌握正则表达式,了解dfa/nfa;Parsing 方面,能读懂BNF,知道AST,会写简单的递归下降parser,会用antlr之类的parser generator;优化方面,知道现代编译器的优化能力有多强,知道如何配合编译器写出高效易读的代码,避免试图outsmart编译器;会实现简单的虚拟机(stack-based,不带GC),并把四则运算表达式翻译为虚拟机指令。
4、编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器(Linker) → 可执行程序 (executables)