軟件設計師 - 程序设计语言与语言处理程序基础篇

沒有底子,這部分的知識點實在難理解。。。。

编译与解释(★★★)

编译过程

  1. 解释型 :只做解释工作,不用于生成目标代码
  2. 编译型 :编译工具

源程序 -> 词法分析 -> 语法分析 -> 语义分析 -> 中间代码生成 -> 代码优化 -> 目标代码生成 -> 目标程序 (其中斜体环节可有可无)

文法(★★) 對於語言的描述

文法定義

  1. 一個形式文法是一個有序四元組G=(V, T, S, P),其中
    a. V :非終結符。不是語言的組成部分
    b. T :終結符。語言的組成部分,最終結果
    c. S : 起始符。語言的開始符號
    d. P : 產生式。用終結符替代非終結符的規則
  2. 正則閉包 : A+ = A1 U A2 U A3 U…
  3. 閉包 :A* = A0 U A+ (在正則閉包的基礎上并上A0)

文法分類

類型別稱説明對應的應用
0型短語文法α→β 其中α、β属于(VTUVN)*,且α长度不为0綫性界限自動機
1型上下文有關文法α→β 其中α、β属于(VTUVN)*,且α的长度小于β的长度綫性界限自動機
2型上下文無關文法A→β A属于VN,β属于(VTUVN)*非確定的
3型正規文法A→α / αB(右线性)或A→α / Bα(左线性)其中A,B属于VN,α属于VT或空集有限自動機机

语法推导树

理解不了概念,直接上例題。
eg. 现有文法G=({a,b},{S,A},S,P),其中:S→aAS|a,A→SbA|SS|ba,构造aabAa相对应的推导树。

由产生式可以得到VT={a,b},VN={S,A},分解出S→aAS|a,即S→aAS,S→a,A→SbA|SS|ba,即A→SbA,A→SS,A→ba,根据分解出的产生式,可以得到推	导树:

在这里插入图片描述

有限自动机(★)

M = {S, Σ, δ, S0, Z}

eg.設有限狀態自動機 DFA = {{S, A, B, C, f}, {1,0}, δ, S, {f}} ,其中 δ(S, 0) = B, δ(S, 1) = A, δ(A, 1) = f, δ(B, 1) = f, δ(A, 1) = C, δ(B, 0) = C, δ(C, 0) = f, δ(C, 1) = f。

解 :從關係式得到如下狀態圖 初始態S -> 終態f 有許多路徑可以走,S輸入1則可以到A,A輸入0則可以到終態 f。
在这里插入图片描述

正规式(★★★★)

概念 :正規式是描述程序語言單詞的表達式,對於字母Σ,其上的正規式及其表示的正規式的集可以遞歸定義如下:
(1). ε是一個正規式,它表示集合L(ε) = {ε}
(2). 若a是Σ上的字符,則a是一個正規式
(3). 若正規式r和s分別表示正規集L®=L(s),則 :
a. r|s 是正規式,表示集合L®UL(s);
b. r·s 是正規式,表示集合L®L(s);
a. r* 是正規式,表示集合(L®)*;
a. ®是正規式,表示集合L®;
僅有有限次數使用上述三個步驟定義的的表達式才是Σ上的正規式。由此可見,正規式要麽爲空,要麽由字母,連接,或,閉包運算符組成,其中閉包運算符有最高優先級,連接運算符有次高優先級,或運算符有最低優先級。

eg.下圖所示為一個有限自動機,其中A為初態,C為終態,該自動機可識別(C
假如寫成正規式 :初始态到终态,每條路都可以是一个单独的式子 A->B->C A*->B*->C A->B->C->B->C …
01 | 0101 | 101 | 001 | 00*(101)* |
在这里插入图片描述
A. 0000 B.1111 C.0101 D.1010

后缀表达式(★★★) - 逆波兰式

逆波兰式(Reverse Polish notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)
eg. 有表达式 (a - b) * (c + 5), 求其后缀表达式 ?
解法1. 化成树,略,再采用后序遍历 ab-c5+*
解法2. 加括弧,将符号转到括弧后面 (a - b) * (c + 5) -> ((a - b) * (c + 5)) -> ((a-b)(c+5))* -> ((ab)-(c5)+)* -> ab-c5+*

传值与传址(★★★★)

这个就不用解释了,略

多种程序语言特点(★★★)

语言特点
Fortran科学计算,执行效率高
Pascal教学开发,表达能力强,Delphi
C指针操作能力强,高效
C++面向对象,高效
Lisp函数式程序语言,符号处理,人工智能
Java面向对象,中间代码,跨平台
C#面向对象,中间代码,.Net
Prolog逻辑推理,简洁性,表达能力,数据库
Python解释型,面向对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值