遍历过程
-
词法分析
将一个个字符切割成单词。正规式,有限自动机
-
语法分析
根据语言语法规则,检查if、for等语法结构
-
语义分析
语义检查,数据类型的检查
-
中间代码生成
-
代码优化
-
目标代码生成
文法定义
语法推导树
棵语法树应具有以下特征:
1.每个结点都有一个标记,此标记是V的一个符号:
2根的标记是S;
3.若一结点n至少有一个它自己除外的子孙,并且有标记A,则A肯定在V中:
4如果结点n的直接子孙,从左到右的次序是结点
n
1
,
n
2
,
⋯
,
n
k
n_1,n_2,\cdots,n_k
n1,n2,⋯,nk其标记分别是:
A
1
,
A
2
,
⋯
,
A
K
A_1,A_2,\cdots,A_K
A1,A2,⋯,AK那么
A
−
>
A
1
,
A
2
,
⋯
A
K
A->A_1,A_2,\cdots A_K
A−>A1,A2,⋯AK一定是P中的一个产生式。
有限自动机
M = ( S , ∑ , δ , S 0 , Z ) M=(S,\sum,δ,S0,Z) M=(S,∑,δ,S0,Z)
- S是一个有限集,每个元素为一个状态
- ∑ \sum ∑是一个有穷字母表,每个元素为一个输入字符
- δ是转换函数:是一个单值对照
- S0,属于S,是其唯一的初态
- Z是一个终态集(可空)
正规式
A选项
S
→
a
A
a
A
A
→
b
S
a
b
S
S
→
a
A
a
b
a
A
A
→
b
S
a
b
a
b
S
S
→
a
A
a
b
a
b
a
A
A
→
b
a
b
a
b
a
b
\begin{array}{cc} S \rightarrow aA & aA \\ A \rightarrow bS & abS \\ S \rightarrow aA & abaA \\ A \rightarrow bS & ababS \\ S \rightarrow aA & ababaA \\ A \rightarrow b & ababab \\ \end{array}
S→aAA→bSS→aAA→bSS→aAA→baAabSabaAababSababaAababab
B选项
S
→
b
B
b
B
B
→
a
S
b
a
S
S
→
b
B
b
a
b
B
B
→
a
S
b
a
b
a
S
S
→
b
B
b
a
b
a
b
B
B
→
a
b
a
b
a
b
a
\begin{array}{cc} S \rightarrow bB & bB \\ B \rightarrow aS & baS \\ S \rightarrow bB & babB \\ B \rightarrow aS & babaS \\ S \rightarrow bB & bababB \\ B \rightarrow a & bababa \\ \end{array}
S→bBB→aSS→bBB→aSS→bBB→abBbaSbabBbabaSbababBbababa
C选项
S
→
a
A
a
A
A
→
b
S
a
b
S
S
→
b
B
a
b
b
B
B
→
a
S
a
b
b
a
S
S
→
a
A
a
b
b
a
a
A
A
→
b
a
b
b
a
a
b
\begin{array}{cc} S \rightarrow aA & aA \\ A \rightarrow bS & abS \\ S \rightarrow bB & abbB \\ B \rightarrow aS & abbaS \\ S \rightarrow aA & abbaaA \\ A \rightarrow b & abbaab \\ \end{array}
S→aAA→bSS→bBB→aSS→aAA→baAabSabbBabbaSabbaaAabbaab
函数调用(传值与传址)
- 传值调用
形参取的是实参的值,形参的改变不会导致调用点所传的实参的值发生改变 - 引用(传址)
形参取的是实参的地址,即相当于实参存储单元的地址圬引用调用因此其值的改变同时就改变了实参的值