# 语法分析算法LR(1)基础教程（上）

### 基本概念

3 + 4 × 5

MultipleExpression:

Integer:3

"+"

MultipleExpression:

Integer:4

"×"

Integer:5

### 定义语法——BNF/EBNF

<MultipleExpression> ::= <MultipleExpression> "×" <PrimaryExpression> | <MultipleExpression> "/" <PrimaryExpression> | <PrimaryExpression>

<PrimaryExpression> ::= "(" <Expression> ")" | <Integer>

MultipleExpression ::= MultipleExpression "×" PrimaryExpression , MultipleExpression "÷" PrimaryExpression , PrimaryExpression

PrimaryExpression ::= "(" Expression ")" , Integer

### LL与LR

LL的第一个L表示from Left to right，第二个L表示Left most推导。

LR的第一个L和LL的第一个L含义相同，第二个R表示Right most推导。



### LR(1)状态机构建

LR(1)分析从外部看起来，每次接受一个字符，最后接收程序终结符时，内部刚好形成一颗语法树。

Expression:

MultipleExpression:

PrimaryExpression:

Integer:3

3 + 4 × 5，在读入×时，

3 × 4 + 5，在读入+时

……

● MultipleExpression

MultipleExpression ●

MultipleExpression ::= MultipleExpression "×" PrimaryExpression , MultipleExpression "÷" PrimaryExpression , PrimaryExpression

● MultipleExpression "×" PrimaryExpression

MultipleExpression ● "×" PrimaryExpression

MultipleExpression "×" ● PrimaryExpression

MultipleExpression "×" PrimaryExpression ●

● MultipleExpression "÷" PrimaryExpression

MultipleExpression ● "÷" PrimaryExpression

MultipleExpression "÷" ● PrimaryExpression

MultipleExpression "÷" PrimaryExpression ●

● PrimaryExpression

PrimaryExpression ●

PrimaryExpression ::= "(" Expression ")" , Integer

● "(" Expression ")"

"(" ● Expression ")"

"(" Expression ● ")"

"(" Expression ")" ●

● Integer

Integer ●

1. 所有以●结尾的状态，操作就是规约,其它状态操作就是移入。
2. 假如当前状态● 后是一个非终结符X，那么所有能规约到X的规则中以●开头的状态迁移规则也适用于当前状态。

● MultipleExpression

● MultipleExpression "×" PrimaryExpression

● MultipleExpression "÷" PrimaryExpression

● PrimaryExpression

● "(" Expression ")"

● Integer

"-": {MultipleExpression:{$:"AdditiveExpression"}},$: "Expression"

},

MultipleExpression:{

"×": {PrimaryExpression:{$:"MultipleExpression"}}, "÷": {PrimaryExpression:{$:"MultipleExpression"}},

$: "AdditiveExpression" }, PrimaryExpression:{$:"MultipleExpression"},

"(":{Expression:{")":{$:"PrimaryExpression"}}}, Integer:{$:"PrimaryExpression"}

}

### 下篇：LR(1)分析过程

posted @ 2011-07-20 03:26  winter-cn  阅读(21395)  评论(5编辑  收藏  举报