编译原理之文法和语言知识点汇总与Pl/0语言文法举例

匿名 (未验证) 提交于 2019-12-03 00:11:01

 

  一个程序设计语言是一个记号系统,如同自然语言一样,它的完整定义应包括语法和语义两个方面。所谓一个语言的语法是指一组规则,用它可以形成和产生一个合适的程序目前广泛使用的手段是上下文无关文法,即用上下文无关文法作为程序设计语言语法的描述工具。语法只是定义什么样的符号序列是合法的,与这些符号的含义毫无关系,比如对于一 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∈Ay∈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

+-*/

129

idbeginifthen

 

ABC

S

exprtermfactorstmt

 

XYZ

 

uvz

 

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!