程序语言的定义:
程序语言主要由语法和语义两方面定义
1、语法:
三个基本概念
A)字母表
B)单词符号
C)语法单位
单词符号:是语言中具有独立意义的最基本结构
语法单位:
由单词符号构成的更大的结构
包括:
A) 表达式
B) 语句
C) 分程序(语句块)
D) 函数(有返回值)
E) 程序
语法定义:一组规则,用这组规则可以产生形式上正确的程序
语法: 词法规则
语法规则
2、语义
语义定义:是指这样的一组规则,使用它可以定义一个程序的意义。
语义描述方法:属性文法和基于属性文法的语法制导翻译方法。
程序设计语言分类:
按照程序设计泛型:
1)强制式语言(过程式语言。c)
2)应用式语言(函数式语言。lisp)
3)基于规则的语言(prolog,yacc)
4)面向对象的语言(java)
文法
有关定义:
1)字母表
2)符号串
3)符号串的前缀和后缀及子串
4)空字:不包含符号的序列称为空字,记为e。用Е*表示Е上的所有符号串的全体,空字也包括在其中
5)符号串的连接运算:设x和y是两个符号串,如果将y直接拼接在x之后,称这种操作为符号串的连接;
6)符号串的方幂:一个符号串与其自身的n-1的任意连接称为次符号串的n次幂,记作:xn 特别地:x0=e
7)字符串集合的和(等价于集合的并运算):设A、B是两个符号串的集合,则将集合A、B的和记为A+B或A B,定义为:A B={w|wA或wB}
8)符号串集合的连接:
9)符号串集合V自身的n次(连接)积记为:
10)V的闭包
11)V的正则包(正闭包,正则闭包):
上下文无关文法:
归纳起来,一个上下文无关文法G包括四个组成部分:一组终结符号,一组非终结符,一个开始符号,以及一组产生式。形式上定义一个上下文无关文法G是一个四元式(VT,VN,S,P)
几个概念:
1) 终结符号
2) 非终结符号
3) 开始符号
4) 产生式
产生式的推导与直接推导:
句子与句型
最左推导和最右推导:在推导的任何一步αÞβ,其中α、β是句型,都是对α中的最左(右)非终结符进行替换
一定要会通过结果定义文法
语法分析树与二义性:
语法分析树:简称语法树。用来表示推导过程
二义性:如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。
重要:
- 文法二义不等于语言二义
- 文法的二义性是不可判定的
- 文法的二义性证明:找出一个句子,它有两个不同的最左推导或最右推导
- 文法二义性的消除:给每个产生式定义优先级或者引入新的非终结符
形式语言鸟瞰
分类:
0型文法
1型文法
2型文法
3型文法
课后习题: