-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[R] 编译系统透视:图解编译原理 #5
Comments
词法分析 (单词)例如:
v8的词法分析const a ='abc'
|
语法分析 (语法)语法分析生成语法树 = 序列二元组 + 语法分析。 产生式的背景例如: var a = 1; 变量声明 标志符 = 常量。 但是,以下就要结合上下文去分析了,单独处理是不行的。 var a = 1;
function b (c) {
a = 100;
return a + c;
}
c = b(666) > 0 ? 1 : 0; 或者说: 有很多的规则,例如有 if else、有function的不同写法等。 对于人来说,你只要知道语言编写的规则就行了:
|
产生式 (常见BNF)3.3.2 产生式的具体示例 ::= : 我们还没有定义完的内容,右边的replacement继续定义。 类似中文: 一般是主谓宾。主语可以是 名词或者代词。谓语一般是动词。宾语是形容词、名次、代词。
1中的右侧就是 234表示 非终止符,但是56的右边就找不到符号进一步代替了,这样描述就结束了。 换成 语言就是 <符号> ::= <使用符号的表达式> exp ::= number("*"|"/") exp | number // 非终结符
number ::= [0-9]+ // 终结符 |
语义分析 (语义)ts是做语语义分析的专家。单词没有问题、语法也没有问题,那后面就是来check 你描述的一句话是否有问题了。 var a = 1;
var c = a + b; // 但是b没有定义啊~ 语义就问题 中间代码生成 和 优化生成目标代码 |
一个简单C程序的运行时结构
程序运行本质: 需要程序指令的驱动,并在动态数据区和静态数据区不停的压栈和清栈。
CPU寄存器: eip、edp、esp。指令来管控和指向等。
推荐看: 《Linux内核设计的艺术》
词法分析: 识别出一个个的符号token,并划分出符号的属性。
语法分析: 从token中一个个的识别出研语法的语句。
The text was updated successfully, but these errors were encountered: