Warning: session_start(): open(/tmp/sess_f82b73c70cdf551ae8030fda44823b4c, 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: 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

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
2020-2021:teams:no_morning_training:fayuanyu:compile [2020/05/13 01:23]
发源于
2020-2021:teams:no_morning_training:fayuanyu:compile [2020/05/13 17:45] (当前版本)
发源于
行 14: 行 14:
   - 代码流出   - 代码流出
  
-本文将只涉及前4点的部分内容,作为潜在的可能对竞赛有用的工具+本文将只涉及前2点的部分内容,作为潜在的可能对竞赛有用的工具\\ 
 +甚至可能用在字符串题(做梦)
  
 =====词法分析===== =====词法分析=====
行 24: 行 25:
 这些单词中一些(如标识符,数)有**语义值**,因此词法分析器也会附上这些信息 这些单词中一些(如标识符,数)有**语义值**,因此词法分析器也会附上这些信息
  
-====处理工具==== +====正则表达式====
-===正则表达式===+
 基本部分:​ 基本部分:​
  
行 40: 行 40:
 为了消除二义性,使用了规则**最长匹配** 和 **优先规则**。 为了压缩篇幅,这里不描述。 为了消除二义性,使用了规则**最长匹配** 和 **优先规则**。 为了压缩篇幅,这里不描述。
  
-===有限状态自动机===+====有限状态自动机====
 实现正则表达式匹配: 实现正则表达式匹配:
  
行 49: 行 49:
 为了保证最长匹配,需要记录上一次遇到的终态的位置 \\ 为了保证最长匹配,需要记录上一次遇到的终态的位置 \\
  
-===非确定状态自动机===+====非确定状态自动机====
 NFA(非确定状态自动机)可能有$\epsilon$的边\\ NFA(非确定状态自动机)可能有$\epsilon$的边\\
 它允许不输入字符的情况下转换状态 它允许不输入字符的情况下转换状态
行 55: 行 55:
 正则更容易转换为NFA \\ 正则更容易转换为NFA \\
 这里只描述连接的转换方法:​ \\ 这里只描述连接的转换方法:​ \\
-若 ''​M''​ 可以建成自动机 ​''​\rightarrow''​+若 ''​M''​ 可以建成自动机 ​$\rightarrow$M \\ 
 +则 ''​M*''​ 建成 $\rightarrow _ \epsilon N \rightarrow M \rightarrow _ \epsilon N$ (指回) ,其中N是一个点 \\
  
 ===确定状态自动机=== ===确定状态自动机===
 +DFA(确定状态自动机)不包含$\epsilon$的边,因此更容易实现
 +
 +为了从NFA转换到DFA ,有如下定义
 +**$\epsilon$闭包**:​ ''​closure(S)''​是从 ''​S''​(一个集合)中状态出发,只经过$\epsilon$边(不接受任何字符),便可到达的状态的集合\\
 +''​closure(S)''​可以通过递归算出,直到不能再经过递归找到新的点为止\\
 +NFA从一个状态集合 ''​S1''​ 吃入一个字符 '​c'​ 后可到达另一个集合 ''​S2''​ \\
 +实现可以是:遍历 ''​S1''​ ,对每个 ''​S1''​ 中状态尝试转移 ''​c''​ ,达到状态集合 ''​S1A''​ \\
 +再求''​closure(S1A)''​ 得到 ''​S2''​
 +
 +有个方案可以求等价的最小自动机
 +
 +=====语法分析=====
 +====上下文无关文法====
 +
 +===推导===
 +===语法分析树===
 +===二义性===
 +
 +====递归下降的语法分析====
 +预测分析
 +LL(1)文法
 +
 +====LR分析====
 +===LR(0)===
 +===LR(1)===
 +
 +=====例题(?​)=====
 +[[http://​uoj.ac/​problem/​98|UOJ:​未来程序·改]]
2020-2021/teams/no_morning_training/fayuanyu/compile.1589304216.txt.gz · 最后更改: 2020/05/13 01:23 由 发源于