Warning: session_start(): open(/tmp/sess_bed0921d44eb4ac11eee723d21bce205, O_RDWR) failed: No space left on device (28) in /data/wiki/inc/init.php on line 239

Warning: session_start(): Failed to read session data: files (path: ) in /data/wiki/inc/init.php on line 239

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/auth.php on line 430

Warning: mkdir(): No space left on device in /data/wiki/lib/plugins/dw2pdf/vendor/mpdf/mpdf/src/Cache.php on line 19
Temporary files directory "/data/wiki/data/tmp/dwpdf/272/" is not writable
Writing /data/wiki/data/cache/d/de2edb2fcb553ea79b79c722a4e13dbc.captchaip failed

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/actions.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/lib/tpl/dokuwiki/main.php on line 12
2020-2021:teams:no_morning_training:fayuanyu:compile [CVBB ACM Team]

用户工具

站点工具


2020-2021:teams:no_morning_training:fayuanyu:compile

在ACM上一辈子都用不到的内容

编译的各个阶段

  1. 词法分析
  2. 语法分析
  3. 语义动作
  4. 语义分析
  5. 帧栈布局
  6. 翻译
  7. 规范化
  8. 指令选择
  9. 控制流分析
  10. 数据流分析
  11. 寄存器分配
  12. 代码流出

本文将只涉及前4点的部分内容,作为潜在的可能对竞赛有用的工具

词法分析

单词

单词的类型: ID (标识符), NUM(整数), REAL(小数), IF, COMMA, ….
而注释,预处理命令,宏,空白符不视为单词

词法分析器读入源程序,返回一个单词流,报告每个单词的类型
这些单词中一些(如标识符,数)有语义值,因此词法分析器也会附上这些信息

处理工具

正则表达式

基本部分:

符号: 对于字母 a, 表达式 a 表示字符串 “a” (废话)
可选: 对于表达式 M, N, M|N 表示属于表达式 MN 的字符串
连结: 符号 ·, 表示连起两个字符串 (严格的定义懒得写了)
$\epsilon$: 空串 重复: kleene 闭包。 (a|b)* == {“a”, “b”, “aa”, “ab”, “ba”, “bb”, …}

正则表达式还有一些简写,如[]?+ 等,但是他们并不影响表达式的描述能力

使用正则表达式可以指明语言的单词。对于每种单词,提供一段代码来报告单词的类型(和附加语义)

为了消除二义性,使用了规则最长匹配优先规则。 为了压缩篇幅,这里不描述。

有限状态自动机

2020-2021/teams/no_morning_training/fayuanyu/compile.1589303513.txt.gz · 最后更改: 2020/05/13 01:11 由 发源于