主页

索引

模块索引

搜索页面

工具

编译器前端工具:

词法分析: Lex(或其 GNU 版本,Flex)
语法分析: Yacc(或 GNU 的版本,Bison)、Antlr、JavaCC
Antlr
1. 有限自动机是比较简单的一种自动机,对应于正则文法,也叫做 3 型文法
    又叫做线性文法(Linear Grammar)。
    它的特点是产生式的右边部分最多只有一个非终结符,
    比如 X->aYb,其中 a 和 b 是终结符
2. 比它强大的是下推自动机,对应于上下文无关文法,也叫做 2 型文法
    区别: 上下文无关文法允许递归调用,而正则文法不允许
    上下文相关的情况: 不是语法分析阶段负责的,而是放在语义分析阶段来处理的
3. 比它更强大的是线性有界自动机,对应于上下文相关文法,也叫 1 型文法
4. 图灵机的范围比它们都大,它对应 0 型文法。你任何能用产生式写出来的文法规则,都属于 0 型文法
语法分析的原理
递归下降算法(Recursive Descent Parsing)
上下文无关文法(Context-free Grammar,CFG

语法和文法有什么区别:

1. 文法,英文叫做Grammar,是形式语言(Formal Language)的一个术语
    正则文法(Regular Grammar)、上下文无关文法(Context-free Grammar)等,用来描述词法和语法
2. 语法,英文是Syntax,主要是描述词是怎么组成句子的
    一个语言的语法规则,通常指的是这个Syntax

递归下降:

采用递归下降算法,总是采用深度优先的策略,先解析最左子节点,然后解析最左子节点的最左子节点。
等着这棵子树完全构建完毕了,再构建第二棵子树。

会导致两个问题,一个是“回溯”,一个是不能处理左递归文法。

主页

索引

模块索引

搜索页面