一个程序设计语言是一个记号系统,如同自然语言一样,它的完整定义应包括语法和语义两个方面。所谓一个语言的语法是指一组规则,用它可以形成和产生一个合适的程序目前广泛使用的手段是上下文无关文法,即用上下文无关文法作为程序设计语言语法的描述工具。语法只是定义什么样的符号序列是合法的,与这些符号的含义毫无关系,比如对于一 PascaA=B+CA=B+BCBCA=B+C
字母表和符号串
:,典型的符号是字母、数字、各种标点和运算符等
:、
a中出现的符号的个数,记作|α|
绌轰覆:0ε| ε|=0
:αα0univ university
:αα0sity university
:αα/ver university
:βαβ≠αβα
αα0()nvst
αβαββα
α=abβ=cdαβ=abcdβα=cdba
α εα= αε = α
AB:AB,ABAB={xylx∈A且y∈B}
:,,
():∑
{ε}
L M
LML∪ML∪M={s|s∈L 或 s∈M}
LMLMLM={st|sL 并且 tM}
LL*L0
LL+L1
G=(VT,VN,S,φ)
VT
VN
VT∩VN =φ
S
φ
BNFBackus-Normal Form
→ 琛ㄧず “” “……”
<……>
| 琛ㄧず“”
BNF
<> → <>+<> | <>-<> | <>
<> → <>*<> | <>/<> | <>
<> → (<>) | i
abc
+-*/
12…9
idbeginifthen
ABC
S
exprtermfactorstmt
XYZ
uv…z
abgd
αβ
“”
G=(VT,VN,S,φ)
GGL(G)
G=(VT,VN,S,φ)αβ&G
()
L(G)
下面以Pl/0文法为例:
Pl/0语言文法的BNF表示:
〈程序〉→〈分程序〉.
〈分程序〉→ [<常量说明部分>][<变量说明部分>][<过程说明部分>]〈语句〉
<常量说明部分> → CONST<常量定义>{ ,<常量定义>};
<常量定义> → <标识符>=<无符号整数>
<无符号整数> → <数字>{<数字>}
<变量说明部分> → VAR<标识符>{ ,<标识符>};
<标识符> → <字母>{<字母>|<数字>}
<过程说明部分> → <过程首部><分程序>;{<过程说明部分>}
<过程首部> → procedure<标识符>;
<语句> → <赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>|<写语句>|<复合语句>|<空>
<赋值语句> → <标识符>:=<表达式>
<复合语句> → begin<语句>{;<语句>}end
<条件> → <表达式><关系运算符><表达式>|odd<表达式>
<表达式> → [+|-]<项>{<加减运算符><项>}
<项> → <因子>{<乘除运算符><因子>}
<因子> → <标识符>|<无符号整数>|(<表达式>)
<加减运符> → +|-
<乘除运算符> → *|/
<关系运算符> → =|#|<|<=|>|>=
<条件语句> → if<条件>then<语句>
<过程调用语句> → call<标识符>
<当型循环语句> → while<条件>do<语句>
<读语句> → read(<标识符>{,<标识符>})
<写语句> → write(<表达式>{,<表达式>})
<字母> → a|b|c…x|y|z
<数字> → 0|1|2…7|8|9
来源:博客园
作者:陌攻
链接:https://www.cnblogs.com/mogong/p/11589786.html