简单优先文法关系矩阵构造

合集下载

第三章 语法分析

第三章 语法分析

第三章语法分析典型例题 :单项选择题3.1.1. 文法 G: S-xSxly 所识别的语言是 _____ (陕西省 1997 年自考题)a. xyxb. (xyx)*c. xnyxn(n ≥ 0)d. x*yx*3.1.2. 文法 G 描述的语言 L(G) 是指 _____ 。

a. L(G)= {α |S=α,α ∈ VT* }b. L(G)={ α |SA=α , α ∈ VT* }c .L(G)={ α |S=α,α∈ (VT ∪ VN)* } d. L(G)= {α |S=α , α∈ (VT ∪ VN)* }3.1.3. 有限状态自动机能识别_。

a. 上下文无关文法b. 上下文有关文法c. 正规文法d. 短语文法3.1.4. 设 G 为算符优先文法, G 的任意终结符对 a, b 有以下关系成立 ____ 。

a. 若 f(a)g(b) ,则 a bb. 若 f(a)<g(b) ,则 a<bc.a~b 都不一定成立d. a~b 一定成立3.1.5 .茹果文法 G 是无二义的,则它的任何句子α _ _。

(西电 1999 年研究生试题)a. 最左推导和最右推导对应的语法树必定相同b. 最左推导和最右推导对应的语法树可能不同c. 最左推导和最右推导必定相同d. 可能存在两个不同的最左推导,但它们对应的语法树相同3.1. 6. 由文法的开始符经。

步或多步推导产生的文法符号序列是 ____ 。

(陕西省 2000 年自考题)a .短语 b. 句柄 c. 句型 d. 句子3.1.7 .文法 G : E-E+TITT-T*P|PP-(E)|I则句型 P+T+i 的句柄和最左素短语分别为 __ _。

a. P+T 和 ib. P 和 P+Tc. i 和 P+T+id. P 和 P3.1.8 .设文法为: S--SA|AA→a|b则对句子 aba ,下面 ____ 是规范推导.a. S=SA=SAA=AAA=aAA=abA=abab. S=SA=SAA=AAA=AAa= Aba =abac. S=SA=SAA=SAa=Sba= Aba =abad. S=SA=Sa=Sba= Aba =aba3.1.9. 文法G: S → b| ∧ |(T)T-T,SIS则 FIRSTVT(T)=____ 。

电子科技大学编译原理--B答案--网络教育

电子科技大学编译原理--B答案--网络教育

《计算机编译原理》试卷B参考答案一、单项选择题(每小题1分,共25分)1、有文法G:E→E*T|TT→T+i|i句子1+2*8+6按该文法G归约,其值为___B___。

A、23B、42C、30D、172、规范归约指___B___。

A、最左推导的逆过程B、最右推导的逆过程C、规范推导D、最左归约的逆过程3、词法分析所依据的是___B___。

A、语义规则B、构词规则C、语法规则D、等价变换规则4、词法分析器的输出结果是___C___。

A、单词的种别编码B、单词在符号表中的位置C、单词的种别编码和自身值D、单词自身值5、正规式M1和M2等价是指___C___。

A、M1和M2的状态数相等B、M1和M2的有向弧条数相等C、M1和M2所识别的语言集相等D、M1和M2状态数和有向弧条数相等6、下面的状态转换图接受的字集为___D___。

A、以0开头的二进制数组成的集合B、以0结尾的二进制数组成的集合C、含奇数个0的二进制数组成的集合D、含偶数个0的二进制数组成的集合7、词法分析器作为独立的阶段使整个编译程序结构更加简洁、明确,因此,___B___。

A、词法分析器应作为独立的一遍B、词法分析器作为子程序较好C、词法分析器分解为多个过程,由语法分析器选择使用D、词法分析器并不作为一个独立的阶段8、若a为终结符,则A→α·aβ为___B___项目A、归约B、移进C、接受D、待约9、若项目集I k含有A→α·,则在状态k时,仅当面临的输入符号a∈FOLLOW(A)时,才采取“A→α·”动作的一定是___D___。

A、LALR文法B、LR(0)文法C、LR(1)文法D、SLR(1)文法10、就文法的描述能力来说,有___C___。

A、SLR(1)⊂LR(0)B、LR(1)⊂LR(0)C、SLR(1)⊂LR(1)D、无二义文法⊂LR(1)11、在LR(0)的ACTION子表中,如果某一行中存在标记“r j”的栏,则___A___。

编译原理复习题

编译原理复习题

一、判断题1.SLR(1)分析法是一种规范归约分析法。

()2.算符优先文法可以是二义性文法。

()3.每个短语都是某规则的右部。

()4.语法分析时必须先消除文法中的左递归。

()5.如果两个正规式是等价的,则它们所表示的正规集相同。

()()1.编译程序的输入是高级语言程序,输出是机器语言程序。

()2.文法G[S]:S→iSeS|iS|i是二义文法。

()3.若一个语言的句子有无穷多个,则对应的文法必定是递归的。

()4.上下文无关文法可以产生语言L={a n b n a m b m | n,m≥0}。

()5.设文法G[N]:N→ND|D,D→0|1|2|3|4|5|6|7,则句子3247的最右推导为:N=>ND=>N4=>ND4=>N74=>ND74=>N274=>D274=>3274。

()6.每一个NFA都对应有唯一的一个最小化的DFA。

()7.文法G[S]:S→(S)S|ε不是LL(1)文法。

()8.若文法任一产生式的右部不含两个相继的非终结符(…QR…),则称该文法为算符文法。

()9.优先函数是唯一的,有的优先关系矩阵不存在对应的优先函数。

()10.在LR(1)分析法中,搜索符仅对规约项目才有意义。

1、文法规则的左部就是非终结符号。

2、乔姆斯基定义1型文法对规则的限制比2型文法对规则的限制要多一些。

3、LR(K)分析法能彻底解决冲突。

4、一个程序是正确的是指该程序的语法是完全正确的。

5、每一个编译程序都由完成词法分析、语法分析、语义分析、代码优化和代码生成工作的五部分程序组成。

6、多遍扫描的编译程序优于单遍扫描的编译程序。

7、每个句子都有规范推导;每个句型都有规范推导。

8、存在这样一些语言,它们能被确定有限自动机(DFA)识别,但不能用正规表达式表示。

9、每一个NFA都对应有唯一的一个最小化的DFA。

10、若给定文法G和某个固定的k,则G是否是LR(k)文法是可判定的。

3.4 自下而上分析方法

3.4 自下而上分析方法
8
d aAbB
2014-10-5
分析过程的特点
1. 从输入串的开头依次读入(移进)单词。 2. 一旦发现可归约串(在上例中是句柄)就立即 归约。 3. 根据句柄对分析树进行修剪子树,剪去子树 的叶子。 4. 若最终能归约成文法的开始符号,则分析成 功。 5. 由于总是将句型的最左边的可归约串替换成 非终结符号,该归约方法通常得到是最右推 导的逆过程。

2014-10-5
2
自顶向下分析算法的基本思想为: 若Z S
G[Z] +
则 S L(G[Z])
否则 S L(G[Z])
存在主要问题: 左递归问题 回溯问题
主要方法: • 递归子程序法 • LL(1)分析法
自底向上分析算法的基本思想为: 若Z S
G[Z] +
则 S L(G[Z])
2014-10-5 20
假定G是一个不含ε产生式的算符文法, 对任一对终结符a,b, 定义 (1) a≐b当且仅当文法G中含有形如 P→…ab… 或 P→…aQb…的产生式; (2) a⋖b当且仅当G中含有形如 P→…aR…的产生式, + + 而R b… 或 R Qb…; (3) a⋗b当且仅当G中含有形如 P→…Rb…的产生式, + + 而R …a 或 R aQ。
3)算符优先分析的特点:

仿效四则运算过程,预先规定相邻终结符 之间的优先关系,然后利用这种优先关系 来确定句型的“句柄” ,并进行规约。
输入串 # 符号栈 # 分析程序 (优先关系矩阵)
18
4)分析器结构:
2014-10-5
概 述:

所谓算符优先分析,就是预先规定运算 符(确切地说是终结符)之间的优先关系和 结合性质,借助于这种优先关系来比较 相邻运算符的优先级,以确定句型的可 归约串并进行归约。 注意:算符优先分析不是规范归约。

编译原理练习题

编译原理练习题

《编译原理》练习题一一、填空题(每空1分)1.设G [S ]是一个文法,我们把能由文法的 开始符号s 推导出来的符号串α称为G 的一个句型。

当句型α仅由 终结符号 组成时 (即α∈V T *),则将它称为G 产生的句子。

2.从某一给定的状态q 出发,仅经过若干条 标记为 ε 的矢线所能达到的状态所组成的集合称为ε-CLOSURE(q)。

3.设G=(V N ,V T ,P,S)是一文法,我们说G 中的一个符号X ∈V N ∪V T 是有用的,是指X 至少出现在 一个句子 的推导过程中,否则,就说X 是无用的。

我们将不含形如A→A 的产生式和不含无用符号及无用产生式的文法称为 已化简的文法 。

4.我们常采用形如 (class, value)的二元式作为一个单词的 内部表示 。

其中,class 是一个整数,用来指示该单词的 类别 ,value 则是单词之值。

5.一个文法G[S]可表示成形如 ( V N ,V T ,P,S ) 的四元式。

其中V N ,V T ,P 均为非空的有限集,分别称为非终结符号集、终结符号集和产生式集, S ∈V N 为文法的开始符号。

此外,将出现在各产生式左部和右部的一切符号所组成的集合称为 字汇表 ,记作V 。

显然,V=V N ∪V T ,V N ∩V T =∅。

6.通常,可通过两种途径来构造词法分析程序。

其一是根据对语言中各类单词的某种描述或定义,用 手工的方式 构造词法分析程序;另外一种途径是所谓词法分析程序的 自动生成 。

7.设G 为一文法,A→α是G 的一个产生式,如果α具有υAδ的形式,其中υ,δ不同时为ε,则称产生式A→α是 直接递归的 。

若存在推导δυαA A *⇒⇒,则称产生式A→α是 递归的 。

8.设M=(K,Σ,f,S 0,Z)为一DFA ,并设s 和t 是M 的两个不同状态,我们说状态s,t 为某一输入串w 所区分 ,是指从s,t 中之一出发,当扫视完w 之后到达M 的终态,但从其中的另一个状态出发,当扫视完同一个w 后而进入 非终态 。

算符优先文法分析

算符优先文法分析

算符优先文法分析1.问题描述基于算符优先分析法的语法分析程序要求:(1)输入已知文法,生成文法矩阵,判断该文法是否是算符优先文法。

(2)用程序自动生成该文法的算符优先关系矩阵。

(3)对人工输入的句型或句子,分析该句型或句子是否合法,能否用已知文法推出。

(4)具有通用性。

所开发的程序可适用于不同的文法和任意输入串,且能判断该文法是否为算符优先文法。

(5)有运行实例。

对于输入的文法和符号串,所编制的语法分析程序应能正确判断此串是否为文法的句子,并要求输出分析过程。

2.算符优先分析法2.1算符优先文法定义:设有不含空串的一文法G,如果G中没有形如G>……BC……的产生式,其中B和C为非终结符,且对任意两个终结符a,b之间之多只有<,>,=,三种关系的一种成立,则称G是一个算符优先文法。

非终结符的FIRSTVT集合和LASTVT集合FIRSTVT(B)={b|B→b…或B→Cb…}LASTVT(B)={b|B→…a或B→…aC}2.2算符优先矩阵算符优先关系矩阵,判断输入是否满足已知文法的依据。

根据非终结符的FIRSTVT集合和LASTVT集合产生。

1.“=”关系若A→…ab…或A→…aBb…,则a=b;2.“〈⋅”关系若A→…aB…,对每一个b属于FIRSTVT(B),有a〈⋅b;3.“⋅〉”关系若A→…Bb…,对每一个a属于LASTVT(B),有a⋅〉 b。

2.3如何规约在分析过程中,利用分析栈存放已识别的那部分句型,而句型的其余部分由剩余输入串组成,通过比较栈顶符号和下一个输入符号之间的关系,可以判别栈顶符号是否为句柄尾符号。

如果是句柄尾,则沿栈顶向下,在栈内寻找句柄头(利用关系)。

由关系和关系之间包括的符号串就是句柄,然后把它们弹出栈,并代之以归约后的非终结符。

这样就完成了一次归约过程。

2.4算符优先分析方法的局限性由于算符优先分析法去掉了单非终结符之间的归约,尽管在分析过程中,当决定是否为句柄时采取一些检查措施,但仍难完全避免把错误的句子得到正确的归约。

compile5_old


南京大学计算机系 赵建华
语法分析----自底向上的分析技术
引言(续)
– 接受:发现输入符号串是句子。 – 报错:发现归约过程没有办法继续,也就是输 入符号串不是句子。
• 基本的实现是使用一个栈,如果输入的符号 串是句子,那么将栈中的符号(自底向上) 序列和未扫描的符号并置后得到的必然是一 个句型(LR技术归约时例外)。在移入时, 将当前输入符号压入栈中。而归约的时候, 被归约的短语总是栈顶开始的一个符号串。 将此符号串替换为非终结符号完成归约。
语法分析----自底向上的分析技术
引言
• 自底向上技术是从输入符号出发,每一步对 相应举行中的某个简单短语(或其他短语) 进行规约。如果能够最终规约到识别符号, 那么就说明这个输入符号串是句子。 • 要解决的问题
– 如何找出简单短语(或其它某特定类型的短 语)? – 将短语规约成哪个非终结符号?
南京大学计算机系 赵建华
南京大学计算机系 赵建华
语法分析----自底向上的分析技术
简单优先分析技术(续)
• 将前面提到的关系分别记为:=,>和<(因为 不容易找到和书上相同的符号)。 • 如果对于任何一对符号,最多只可能出现前 面的其中一种情况,那么我们可以得到分析 这个文法的句子的方法。 • 显然,一个句型的简单短语就是最左的>关 系和它左边的最右的<的关系所限定的子符 号串。这就给出了确定句柄的方法。
南京大学计算机系 赵建华
语法分析----自底向上的分析技术
简单优先分析技术(续)
• 在选择句柄的时候使用如下的方法:
– 对于句型S1…Sj-1SjSj+1…Si-1SiSi+1…Sn,如果子符 号串Sj-1SjSj+1…Si-1SiSi+1是满足Sj-1<Sj, Sj=Sj+1, …, Si-1=Si, Si>Si+1的最左的子符号串,那么它就是句 柄。

编译原理习题与答案


第三章
正规表达式:a(b|a(a|b))|b(a|b)
a a X b 2 1 b a b 3 a Y b
a a X b 2 1 b a
3 a
b
第三章
用子集法将NFA确定化。
I {X} {1} {2} {3} {Y} Ia {1} {3} {Y} {Y} - Ib {2} {Y} {Y} {Y} -
S→A B→C|B+C
A→B|AiB C→)A*|(
第四章
1)将文法G[S]改写为LL(1)文法。 文法G[S]为左递归文法,削去文法左递归 后的文法为: S→A A→BA’ A’→ iBA’|ε B→CB’ B’ → +CB’|ε C→)A*|(
S→A A→BA’ A’→ iBA’|ε B→CB’ B’ → +CB’|ε C→)A*|(
2 3 4 5 6 7
a 1 3 - 3 3 5 6 6
b 2 4 5 6 5 7 6 7
第三章
{0,1,2,5}, {4}, {3,6,7}
对于非终态集,在输入字符 a 、
b 后按其下一状态落入的状态集 不同而最终划分为
{0}, {1}, {2}, {5}, {4}, {3,6,7}
按顺序重新命名为 0 、 1 、 2 、 3 、
b
6
b
b
0 1 2 3 4 5 6 7
a 1 3 - 3 3 5 6 6
b 2 4 5 6 5 7 6 7
第三章
对上图的 DFA 进行最小化。首先将
状态分为非终态集和终态集两部分: 0 {0,1,2,5}和{3,4,6,7}。 1
由终态集可知,对于状态 3、 6、 7,
无论输入字符是 a 还是 b 的下一状态 均为终态集,而状态 4 在输入字符 b 的下一状态落入非终态集,故将其 化为分{0,1,2,5}, {4}, {3,6,7}

编译原理.pdf

单选题1.如果一个产生式的左部或右部含有无用符号,则此产生式称为()产生式。

A.非法B.多余C.非确定D.无用答案:D2.汇编程序是将什么程序改造成目标语言程序的翻译程序()。

A.机器语言B.汇编语言C.高级语言D.低级语言答案:B3.编译过程的核心部分是什么()。

A.语法结构B.语法分析C.源程序D.单词符号答案:B4.所谓NFA的确定化,是指对任给的NFA,都能相应地构造一DFA,使它们有相同的什么()。

A.状态集B.符号集C.接受集D.结点集答案:C5.设有文法G[S]:S→a|b|(T),T→TdS|S,考察该文法的句型(Sd(T)db),其中哪个是句柄()。

A.SB.bC.(T)D.Sd(T)答案:A6.文法Z→ABb|c,A→Ba,B→Za中含有什么样的非终结符号()。

A.直接左递归B.直接右递归C.间接左递归D.间接右递归答案:C7.LL(1)分析表可用一个二维数组表示,它的每一行与文法的一个什么符号相关联()。

A.非终结符号B.终结符号C.界符#号D.开始符号答案:A8.语言L={ambn|m≥0,n≥1}的正规表达式是什么()。

A.a*bb*B.aa*bb*C.aa*b*D.a*b*答案:A9.一个状态转换图中只能含有一个什么,用来指示分析的开始()。

A.输入字符B.矢线C.终态D.初态答案:D10.LL(1)分析法的名字中,第一个“L”的含义是什么()。

A.自左至右B.自顶向下C.自底向上D.自右至左答案:A11.在文法中,由于有些符号不需要进一步定义,故通常将它们称为什么()。

A.终结符号B.非终结符号C.开始符号D.基本符号答案:A12.在语法分析处理中,FIRST集合、FOLLOW集合均是什么样的集合()。

A.非终极符集B.终极符集C.字母表D.状态集答案:B13.LL(l)文法的条件是什么()。

A.对形如U→x1|x2|…|xn的产生式,要求FIRST(xi)∩FIRST(xj)=(i≠j)B.对形如U→x1|x2|…|xn的产生式,若xiÞε,则要求FIRST(xj)∩FOLLOW(U)=C.前两条D.都不是答案:C14.a-(b*c/(c-d)+(-b)*a)的逆波兰表示是什么()。

《编译原理》课程研讨题(2016)

第一次研讨、第一批(第3周)1.讨论:(1)编译方法与解释方法的主要区别(2)编译程序组合中分端(前端/后端)和分遍(单遍/多遍)的作用(3)编译程序生成方法中自编译与自展的含义2.编写PL/0程序,功能:输入正整数n,求sum = 1! + 2 ! + ... + n!3.扩充PL/0语言文法的定义,增加实数类型和数组类型。

例:Var i:integer;r:real;A:array[1..10]of real;……A[i]:=r;4.设有下列文法G1[S]和G2[S]:1)指出文法的类型2)证明两者等价G1[S]:S→aAb | bBaA→aA | aB→Bb | bG2[S]:S→aA | bBA→aA | aCB→bB | bDC→bD→a5. 构造一个文法,使其语言是奇数集,且每个奇数不以0开头。

6.文法G[S] 的一个句子abbba 的语法树如下图:SA B aA b b Ba b1) G[S]可能包含哪些产生式?2) 给出句子abbba的规范推导。

3) 求出句子abbba 的句柄。

7.设有上下文无关文法G[S]:S→aAb A→aB A→a B→bA B→b 试构造与G[S]等价的正规文法。

8 实验一识别标识符(A)第一次研讨、第二批(第4周)1.编写PL/0程序,输入正整数n、x1、x2、…、x n,计算:S= ∑ x i/i! i=1~n。

2.构造下列语言的文法,并分析比较(1)L1(G)={a n b n|n≥1}(2)L2(G)={(ab) n|n≥1}(3)L3(G)={a n b m|n,m≥0}(4)L4(G)={a n b m|n,m≥1}3.定义一个文法,产生表达式E:1)含有双目运算符+,*2)+ 的优先级高于*3)+ 右结合,* 左结合4)运算对象为标识符i5)可用括号改变算符的优先级4.扩充PL/0语言文法的定义, 增加for语句的功能。

for语句的示例如下:for i:= 1 to 100 do s:=s+i;5.定义一个文法,产生下列语言:该语言由a、b符号串组成,串中a和b的个数相同6.证明下列文法为二义文法(能否转换为等价的非二义文法?)⑴G1[S]:S→A A→AA A→aAb A→ab⑵G2[S]:S→aSb S→Sb S→b7.试写出V T={0,1},分别满足下述要求的正则表达式:⑴所有以1开始和0结束的符号串。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

通达学院 专业课程设计II

题 目: 简单优先文法关系矩阵构造 专 业 计算机通信 学 生 姓 名 班 级 学 号 指 导 教 师 指 导 单 位 计算机学院计算机科学与技术系 日 期 2012.11.12-2012.11.23 教师评语

同学出勤率(满勤、较高、一般,较低),学习态度(端正、较端正、一般、较差),程序设计基础(好、较好、一般、较差),演示程序(已经、没有)达到了基本要求,算法设计(好、较好、一般),界面友好程度(好、较好、一般),答辩过程中回答问题(准确、较准确、错误率较高),撰写报告格式(规范、一般)、内容(丰满、简单)、表述(清晰、一般、不清楚),(圆满、较好、基本)完成了课题任务。

教师签名: 年 月 日

成绩评定

备 注 简单优先文法关系矩阵构造 一、 课题内容和要求 基本功能:对任意输入的文法均可计算其文法符号的优先关系。例如文法G[Z],一共有7个符号:Z、M、L、a、b、(、),文法之间的关系(规则)如下: Z ∷=bMb M ∷=(L|a L∷=Ma)

二、概要设计 1. 字符串处理:此模块要求能够从输入的字符串中提取出字符集,包括终结符和非终结符,建立对应的字符表。 2. 矩阵的乘方:此模块要求能够计算矩阵的乘方,细化后应包括有局真的乘法的子模块。 3. 求解R,L,=关系模块。 1)R关系:由语法语句定义可知”A::=…|..”形式可知扫描每一句语句找出第四个字符,和“|”字符的下一个字符,同定义符构成R关系。 2)L关系:由语法语句定义可知”A::=…|..”形式可知扫描每一句语句找出最后一个字符,和“|”字符的前一个字符,同定义符构成L关系。 3)=关系:例如”A::=AS|Aa|b”可知只需从第四个字符开始依次查找,A=S,遇到“|”符号时扫描指针i向后移动两位。 4. 矩阵的并(和)运算:根据编译原理中简单文法的规则,需要求出L+关系,R+关系,L*关系,而此求解根据warshll算法的需要进行大量的乘方运算。 L+=(L) U(L^2)U(L^3)……U(L^n) L*=(L^0) U (L^1)U(L^2)U(L^3)……U(L^n) R+=(R) U(R^2)U(R^3)……U(R^n) 5. 矩阵显示输出模块 6. 流程图 Start输入语法语句搜索终结符及非终结符

建立字符集V建立各种矩阵并初始化

完成矩阵的 初始化

计算R关系计算L关系计算=关系计算出三种关系计算L+计算R+计算L* 根据公式计算出>、

合成最后输出矩阵

输出显示各矩阵End 三、详细设计 #include #include #include int hasletter(char *v,char c) //判断字符表中是否含有某一字符 { int mark=0; int length=strlen(v); for (int i=0;i{ if (c==v[i]) { mark=1; //mark=1 字符表v中含有c break; } } return mark; } void searchstring(char *v,char **pMatrix,int n) //建立字符表 { int i,k,p; char *Vletter =new char[257]; Vletter[256]='\0';; for (i=0;i<256;i++) { Vletter[i]='\0';

} for (i=0,k=0,p=0;i{ for (int j=0;j{ if (!hasletter(v,pMatrix[i][j])) { if ((pMatrix[i][j]<='Z')&&(pMatrix[i][j]>='A')) { v[k++]=pMatrix[i][j]; } else if (!hasletter(Vletter,pMatrix[i][j])) { if (((pMatrix[i][j]<'A')||(pMatrix[i][j]>'Z'))&&(pMatrix[i][j]!=':'&&pMatrix[i][j]!='='&&pMatrix[i][j]!='|')) { Vletter[p++]=pMatrix[i][j]; } } } } } int vl=strlen(v); int Vletterl=strlen(Vletter); for (i=vl,k=0;k{ v[i]=Vletter[k]; } } /*******矩阵乘法******/ void Matrix_mutiply(int **Matrix_1, int **Matrix_2,int **Matrix_Resutl, int n) { int length=n; int temp=0; for (int row=0;row{ for(int column=0;column{ for(int m=0;m{ Matrix_Resutl[row][column]+=Matrix_1[row][m]*Matrix_2[m][column]; if (Matrix_Resutl[row][column]!=0) { Matrix_Resutl[row][column]=1; } } } } } /*******矩阵输出显示******/ void matrixprint(int **ma,int length) //矩阵的输出显示 { int mark=0; for (int i=0 ;i{ for(int j=0;j{ mark++; if (mark{ printf(" %d ",ma[i][j]); } else { printf(" %d \n",ma[i][j]); mark=0; }

} } printf("\n \n"); } void matrixprintchar(char **ma,int length,char *v) //矩阵的输出为> = { int mark=0; printf(" "); for (int k=0;k{ printf(" %c ",v[k]); } printf("\n"); for (int i=0 ;i{ printf(" %c ",v[i]); for(int j=0;j{

mark++; if (mark{ printf(" %c ",ma[i][j]); } else { printf(" %c \n",ma[i][j]); mark=0; }

} } printf("\n \n"); } /*******矩阵的转置******/ void matrixTravers(int **Matrix_1,int **matrixTravers,int n) //矩阵的转置 { int temp=0; for (int i=0;i{ for (int j=i+1;j{ temp=Matrix_1[i][j]; Matrix_1[i][j]=Matrix_1[j][i]; Matrix_1[j][i]=temp; } } for (int k=0;k{ for (int m=0;m{ matrixTravers[k][m]=Matrix_1[k][m]; } } } /*******显示最后的优先关系矩阵******/ void showresult(int **BE_Matrix,int **BL_Matix,int **BB_Matrix,char **result_Matrix,int n) //合成最后的矩阵 { for (int i=0;i{ for (int j=0;j{ if (!((BE_Matrix[i][j]==0)&&(BL_Matix[i][j]==0)&&(BB_Matrix[i][j]==0))) { if (BE_Matrix[i][j]==1) { result_Matrix[i][j]='='; continue; } else if (BB_Matrix[i][j]==1) { result_Matrix[i][j]='>'; continue; } else if (BL_Matix[i][j]==1) { result_Matrix[i][j]='<'; } } } }

相关文档
最新文档