北邮-语义分析
- 格式:docx
- 大小:128.79 KB
- 文档页数:18
泛函分析基础(2015年加强版) ,设(,d x]0,1为闭区间]0,1上赋予度量]为定义在3的哪些子集构成3的线性子空间【[0,2],Cπ【为赋范空间,,,n nx Xαα∈[0,1]上的∞和1不为等价范数∞中除有限个坐标之外均为.p【19】.X '∈【190E 是X 的真闭子空间.y X ∈【23固定,考虑3的线性子空间}33:0x =为赋范空间,M 为X 的线性子空间】 为赋范空间*,.f X ∈【31】Banach 空间Y 为赋范空间为一系列有界线性算子【1,【34】】存在唯一的[0,1],x C ∈,<∞-∞<},n e 为和{:n f n ≥的子空间,,M N ⊥是线性子空间并对于∞中只有有限多个零项的序列构成的子空间,,n x 是赋范空间(,)B xε≠∈使得M,=根据下确界的重要条件,得0inf{d. (略)n n a t .对于n n na t -+2n n b t nb t -++)()g t -<是一个有理数,且().t{()|s f t s 中任何两个不同元素之间的距离均为且有不可数多个.,则这些不相交的小球每一个必含有,,n n x y ∃∈).→+∞②2中元素e 1,0,1,0,.n⎫-⎪⎭{|n e n =≥,0,).下面证明M 是有界闭集但不是紧集.2(,0)1,n d e =<故M 是有界集有2(,)n m d e e ⎛= 2时,则必有0,0,N ∃>当.M .,)d 是完备的的闭子集定义映射,T Tx =,)|Tx Ty Tx =3的哪些子集构成3的线性子空间3).2,x =且3x 11x =+的0≥且2x ≤},1,2.i =)1,0,y M ∈,,1,2,3i =2,1,M α=}:,[,].n n i a t a t a b +∈∈容易验证在通常多项式的加法和与实数的乘法运算下有()(p t p t α且易验证加法与数乘满足线性空间的八个条件},n t 线性无关},n t 是X 的不是Y 的线性子空间∈K ,有()p t α为赋范空间,,n n x y ,y α→→∞和1不为等价范数110|()|max t x t dt ∈=≤⎰⎰使得()[0,1],x t C ∀∈[0,1],C 使得nx ∞>∞中除有限个坐标之外均为不为Banach ∞的线性子空间.1111,,,,,0,0,.23n⎫⎪⎭则()n x ∈})n 是一个Cauchy 列.,n >则()()1110,,0,,,,,0,,12n m x x n n m⎛⎫-= ⎪++⎝⎭10(,).1n m n =→→+∞+故{}()n x 是Cauchy 111,,,,12n n n ⎫⎪++⎭,则()()11sup 0(1n n k k k x x x x n n ≥-=-=→+),n →+∞但x M ∉,故M 不完备.}}:lim 0n n x ∞→∞∈=,由例1.3.6知0C)10,,,,,n n x x C +∈存在),,,0,0,,n x M ∈()11sup sup n k k k k k n x x x ≥≥+-=→时).中稠密.故0C 是M 的完备化空间上定义线性泛函(=(),[1,1].f x x t dt x C ∈-) sup ()sup 212n n f x n ∈∈=- ⎪⎝⎭()x t ⇔在(1,0)-上符号相同且},n e 为,1,i j n ≤≤唯一确定,,n α∈K ,n β∈K 1111n n n nx e e y e e αααββ=++=++,11,,,nni ii i i j i i ij i j ee e βαβαβγ===∑∑∑00,x ⇔=),,n α∈K 12212222120,n n n n n nn n γγαγγγα⎛⎫ ⎪ ⎪⎪ ⎪≥ ⎪⎪ ⎪ ⎪⎪⎪ ⎪⎭⎝⎭⎝⎭①满足①式,则由11nni i ij i j αβγ==∑∑所定义的映射是一个内积Hilbert 空间为H 的闭线性子空间.求证:M 为H[1,1]odd C -[1,1],even C ∈-Hilbert 空间{sup,x y =,,n k 有0,=即j e ),j j x e e e 固定,考虑3的线性子空间}33:0Z x =上的线性泛函2311(,)f x x x a x =到3上的所有保范延拓的有界线性泛函.3中定义范数1x x =首先证{12max ,f a a =因为对12(,,0)x x Z ∀∈∈又若取(sgn x =3,定义F ,Z 有()F x }时,有F故,此时F 是f 到3上的保范延拓.32★4-4.设X 为赋范空间,M 为X 的线性子空间,0.x X ∈ 求证0x M ∈当且仅当任取,0,Mf X f'∈=都有0()0.f x ="":⇒若0,x M ∈则{},n x M ∃⊂且0().n x x n →→∞ 因,f X '∈且0,Mf=则()()0()lim lim 0.n n n n f x f x x →∞→∞===""⇐:反证法.若0,x M ∉因为M 是闭集,故()0,0.x M d ρ=> 则根据定理4.1.7,则,f X '∃∈使得01,0,()0Mf ff x d ===>,与条件矛盾. 34●4-17.设X 为Banach 空间,Y 为赋范空间,(,)n T B X Y ∈为一系列有界线性算子,设任取{},n x X T x ∈都是Y 中的Cauchy 列,求证:存在常数0,C ≥使得任取1,.n n T C ≥≤35 ●4-18.在上题中又设Y 为Banach 空间,求证:存在(,),T B X Y ∈使得任取,,n x X T x Tx ∈→且1sup .n n T T ≥≤因为{}n T x 是Y 中的Cauchy 列,则{}n T x 是有界集,即,x X ∀∈有sup .n n T x ∈<+∞因为X 是Banach 空间,故由一致有界原则有sup ,n n T ∈<+∞即0,c ∃>使得对,n ∀有.n T c ≤若Y 完备,则,Tx Y ∃∈使得n T x Tx →(参考定理2.4.5的证明), 且lim lim sup ,n n n n n n Tx T x T x T x →∞→∞∈==≤⋅故sup .n n T T ∈≤36★4-20.设X 为赋范空间,,,n n x x X x ∈⇀.x 求证:{:1}.n x span x n ∈≥ 若n x ⇀x ,则,f X '∀∈有()().n f x f x →若{}:1,n x span x n ∉≥则{}(),:10.n d x span x n d ≥=> 根据定理4.1.7知,存在{}:1,1,0,n span x n f X f f≥'∈==且()0f x d =>与()()n f x f x →相矛盾.1,级数1n ≥∑.∞)1,,,n x ∈定义1()nn i i i f x y x ==∑是定义在1上的线性泛函且1max n f ≤=1,级数1n n n y x +∞=∑收敛,故lim n →∞1,都有sup (n n f x ∈根据一致有界原则,得sup ,n n f ∈<+∞即1sup max sup .i n i nn y y ≤≤∈∈=<+∞∞中只有有限多个零项的序列构成的子空间)()1,,,,,,,n n x y y y →=式中k y =并计算;T 逆算子定理矛盾?21∞有Tx (1,1,,1,)x =(全为1),111,,,,,2Tx n ⎛⎫= ⎪⎝⎭且1,1,x Tx == 1sup 1,x Tx Tx >=≥=故 1.T =()()1121212:,,,,,2,,,,,,k k k k T y y y y x y y ky ky ky -++=→= 111,1,,1,,,,k k y k k ⎛⎫ ⎪= ⎪⎝⎭项故,k y X ∈且()11,2,,,1,1,,k T y k X -=∈ 11,(),k k k y x T y k k -===→+∞→+∞故1T -无界.这与开映射定理不矛盾,因为X 不完备.取1010,0,,0,,,n n x X n -⎛⎫ ⎪=∈ ⎪⎝⎭个因为110,(,),n m x n m n m =-→→∞所以但是当n →∞时,有(0,0,,0,),n x X →∉故。
北京邮电大学__自动机__课后习题答案形式语言与自动机第二章4.找出右线性文法,能构成长度为1至5个字符且以字母为首的字符串。
答:G={N,T,P,S} 其中N={S,A,B,C,D} T={x,y} 其中x ∈{所有字母} y ∈{所有的字符} P 如下: S →x S →xA A →y A →yBB →y B →yC C →y C →yD D →y6.构造上下文无关文法能够产生L={ω/ω∈{a,b}*且ω中a 的个数是b 的两倍} 答:G={N,T,P,S} 其中N={S} T={a,b} P 如下: S →aab S →aba S →baa S →aabS S →aaSb S →aSab S →Saab S →abaS S →abSa S →aSba S →Saba S →baaS S →baSa S →bSaa S →Sbaa7.找出由下列各组生成式产生的语言(起始符为S )(1) S →SaS S →b (2) S →a S b S →c(3) S →a S →aE E →aS答:(1)b(ab)n /n ≥0}或者L={(ba)n b /n ≥0}(2) L={a n cb n /n ≥0} (3) L={a 2n+1 /n ≥0}第三章1.下列集合是否为正则集,若是正则集写出其正则式。
(1)含有偶数个a 和奇数个b 的{a,b}*上的字符串集合(2)含有相同个数a 和b 的字符串集合(3)不含子串aba 的{a,b}*上的字符串集合答:(1)是正则集,自动机如下a ab b b baa(2) 不是正则集,用泵浦引理可以证明,具体见17题(2)。
偶a 偶b 偶a 奇b 奇a 奇b 奇a 偶b(3) 是正则集先看L’为包含子串aba的{a,b}*上的字符串集合显然这是正则集,可以写出表达式和画出自动机。
(略)则不包含子串aba的{a,b}*上的字符串集合L是L’的非。
根据正则集的性质,L也是正则集。
语义分析的一些方法语义分析的一些方法(上篇)•5040语义分析,本文指运用各种机器学习方法,挖掘与学习文本、图片等的深层次概念。
wikipedia上的解释:In machine learning, semantic analysis of a corpus is the task of building structures that approximate concepts from a large set of documents(or images)。
工作这几年,陆陆续续实践过一些项目,有搜索广告,社交广告,微博广告,品牌广告,内容广告等。
要使我们广告平台效益最大化,首先需要理解用户,Context(将展示广告的上下文)和广告,才能将最合适的广告展示给用户。
而这其中,就离不开对用户,对上下文,对广告的语义分析,由此催生了一些子项目,例如文本语义分析,图片语义理解,语义索引,短串语义关联,用户广告语义匹配等。
接下来我将写一写我所认识的语义分析的一些方法,虽说我们在做的时候,效果导向居多,方法理论理解也许并不深入,不过权当个人知识点总结,有任何不当之处请指正,谢谢。
本文主要由以下四部分组成:文本基本处理,文本语义分析,图片语义分析,语义分析小结。
先讲述文本处理的基本方法,这构成了语义分析的基础。
接着分文本和图片两节讲述各自语义分析的一些方法,值得注意的是,虽说分为两节,但文本和图片在语义分析方法上有很多共通与关联。
最后我们简单介绍下语义分析在广点通“用户广告匹配”上的应用,并展望一下未来的语义分析方法。
1 文本基本处理在讲文本语义分析之前,我们先说下文本基本处理,因为它构成了语义分析的基础。
而文本处理有很多方面,考虑到本文主题,这里只介绍中文分词以及Term Weighting。
1.1 中文分词拿到一段文本后,通常情况下,首先要做分词。
分词的方法一般有如下几种:•基于字符串匹配的分词方法。
此方法按照不同的扫描方式,逐个查找词库进行分词。
语义分析:理解自然语言中潜在的意义语义分析是自然语言处理领域的一个重要分支,旨在通过计算机对自然语言中的句子及其语义进行深入理解和分析。
语义分析的目标是将句子中的各个组成部分(例如词、短语、句子等)与其在语言中所代表的真实世界实体或概念相对应,从而揭示句子的潜在意义。
在语义分析的过程中,计算机需要对句子进行语法解析、语义角色标注、义原提取、语义关系抽取等一系列操作,以便准确地理解句子的含义。
语义分析涉及的关键技术包括词向量表示、情感分析、实体关系抽取、信息抽取等。
语义分析在自然语言处理领域有着广泛的应用。
其中一个重要的应用领域是机器翻译。
在翻译过程中,语义分析可以帮助翻译系统更加准确地理解源语言句子的意思,并将其转化为目标语言的等效表达。
此外,语义分析还可以应用于文本分类、情感分析、问答系统、信息检索等领域。
语义分析的技术方法非常丰富多样。
下面将介绍一些常用的技术方法:1.词向量表示:词向量是将单词或短语映射到向量空间中的表示形式。
通过将单词映射到高维空间,并使用相似度或距离度量来衡量词之间的语义关联性,可以帮助计算机更好地理解句子中的词义。
目前,常用的词向量表示方法包括word2vec、GloVe等。
2.语法解析:语法解析是指将句子分解为一系列短语、从句等语法结构的过程。
语法解析可以帮助计算机理解句子的结构和语法规则,从而更好地抽取句子的语义信息。
常用的语法解析方法包括基于规则的语法解析、基于统计的语法解析等。
3.情感分析:情感分析旨在计算出句子中所包含的情感倾向,例如积极、消极和中性。
情感分析可以通过分析句子中的情感词、情感强度、情感极性等来判断句子的情感色彩。
常见的情感分析方法包括基于词典的情感分析、基于机器学习的情感分析等。
4.实体关系抽取:实体关系抽取是指从文本中提取出实体之间的语义关系。
实体关系抽取可以帮助计算机更好地理解文本中描述的现象、事件和实体之间的关系。
常用的实体关系抽取方法包括基于规则的实体关系抽取、基于模式匹配的实体关系抽取、基于深度学习的实体关系抽取等。
北邮计算机专硕考研科目北邮计算机专硕考研科目主要包括科目一:政治、外语、专业综合知识,科目二:数据结构与算法设计、计算机组成与体系结构、操作系统原理,科目三:计算机网络原理、数据库原理、编译原理,科目四:计算机高级语言程序设计、面向对象程序设计、软件工程原理。
科目二主要考察计算机基础知识,包括数据结构与算法设计、计算机组成与体系结构和操作系统原理。
数据结构与算法设计的考试内容包括线性表、树、图等数据结构的基本概念和应用,以及常见算法的设计与分析。
计算机组成与体系结构的考试内容包括计算机硬件体系结构、指令系统和数据通路等相关内容。
操作系统原理的考试内容包括进程管理、内存管理、文件系统等操作系统的基本原理和实现方法。
科目三主要考察计算机网络原理、数据库原理和编译原理。
计算机网络原理的考试内容包括网络拓扑、传输协议、网络安全等相关内容。
数据库原理的考试内容包括数据库模型、关系代数、数据完整性等数据库的基本原理和应用。
编译原理的考试内容包括词法分析、语法分析、语义分析等编译原理的基本概念和实现方法。
科目四主要考察计算机高级语言程序设计、面向对象程序设计和软件工程原理。
计算机高级语言程序设计的考试内容包括C++、Java等高级程序设计语言的语法和应用。
面向对象程序设计的考试内容包括面向对象的基本概念、类和对象的设计和应用等。
软件工程原理的考试内容包括软件开发过程、软件项目管理、软件测试等软件工程的基本原理和方法。
以上就是北邮计算机专硕考研科目的大致情况。
考生在备考过程中,除了对各科目的考试内容进行逐一了解和学习,还需要注重练习和实践,提高解题和编程能力。
此外,注意及时了解考试动态和要求,合理安排备考时间,制定科学的复习计划,有针对性地进行复习和训练,才能取得好的考研成绩。
育明教育中国考研专业课辅导第一品牌八年专注于北京邮电大学行政管理考研专业课辅导。
2014年,育明教育共有4名学员成功考上北京邮电大学行政管理专业,包括初试第二名侯liyuan(1对1学员,374分,二本)。
更有8名学员成功考上北大行管,12名学员成功考上中国人民大学公共管理学院。
2015年北京师范大学行管考研全程班(基础+强化+冲刺)优惠价2500元!赠送阅卷人指导一对一指导!2015年北邮行管考研参考书(官方版)615 公共管理理论《公共管理学》(修订版),张成福、党秀云,中国人民大学出版社,2007年1月版(为主);《公共管理导论》,欧文·休斯,中国人民大学出版社(第三版)。
819公共管理专业综合《行政管理学》(第四版),夏书章主编,高等教育出版社、中山大学出版社,2008年版;《社会学概论新修》(精编版),郑航生,中国人民大学出版社,2009年版(为主);北邮参考书复习特点解析:夏书章的《行政管理学》框架非常明晰第一遍背诵的时候列出整体框架笔记《社会学》关注重点概念的定义重点理论的内容张成福的《公共管理》条目较多我认为公共政策是重点一定要熟练背诵可能有些问题会混淆注重重点概念的区分休斯的《公共管理导论》在近两年的比重越来越大可能因为翻译的问题或者外国人思路的不同以下由育明教育考研考博辅导中心提供欧文休斯-公共管理导论第一章改革的年代一、导言:公共治理的“典范转移”:(一)行政管理的三阶段[①]:1、前传统阶段;2、公共行政传统模式阶段;3、公共管理改革阶段。
1、“公共行政传统模式阶段”的主要特点:“唯一最佳方法”的神话(1)政府本身应按照“等级制-官僚制原则”进行组织;(2)政府可以通过官僚制组织结构成为公共物品的“直接提供者”;(3)“政治-行政两分法”的意识形态[②];(4)“公共行政”是行政官僚的一种特殊形式,准此,“职业官僚”就需终身任职、政治中立等。
2、“新公共管理”的批判-改革趋向:(1)NPM对古典模式的批判:①.弹性化的管理系统VS.僵化的官僚等级体制;②.宏观性间接性运作VS.微观性直接性运作;③.行政的政治化,政治-行政二分理论的破产;④.短期合同任职制VS.终身任制;(2)NPM的内在特质&改革趋势:(胡德[③]-休斯[④]-奥斯本[⑤]解读)“新公共行政”(NPA)与“新公共管理”(NPM)间的区分:(1)“明布鲁克会议”和《黑堡宣言》:NPA是对“进步时代”技治主义流毒的一种的反击和回应:马克·霍哲和张梦中在一篇论及新公共行政的文章中提到NPA的回应性、代表性、公共性和参与性等;其中的主要代表人物是沃尔多、弗雷德里克森、丹哈特、拉波特等;主要的代表作是:《黑堡宣言》。
人工智能语言处理技术的语义分析技巧语义分析技术是人工智能语言处理领域的一项重要技术,它的目标是理解人类语言中的语义信息。
通过对语句、句子或文本的分析,语义分析技术可以从中提取出关键信息,帮助机器理解人类的意图和含义。
本文将介绍一些人工智能语言处理技术中的语义分析技巧,包括词义消歧、语义角色标注和情感分析。
一、词义消歧词义消歧是一种常见的语义分析技巧,它在处理具有多义词的语句时起到关键作用。
多义词是指具有多个不同意义的词,如英语中的“bank”可以指银行或河岸。
在语义分析过程中,词义消歧技术通过上下文信息来确定词语的具体含义。
词义消歧可以使用多种方法,其中一种常见的方法是基于统计的方法。
这种方法通过分析大规模语料库中的词语使用情况,计算不同上下文中词语的概率分布,从而判断一个词在特定上下文中的具体含义。
另一种方法是基于知识图谱的方法,通过构建词语之间的关系网络,判断一个词在特定上下文中的含义。
这些方法可以结合使用,提高词义消歧的准确性和效果。
二、语义角色标注语义角色标注是对句子中的词语进行语义角色标签的标注,旨在分析句子中不同词语之间的语义关系。
通过语义角色标注,可以确定一个句子中不同词语在语义上的作用和关系,从而帮助理解句子的语义含义。
语义角色标注可以分为浅层语义角色标注和深层语义角色标注。
浅层语义角色标注主要关注词语在句子中的语法角色,如主语、宾语、谓语等,而深层语义角色标注则更关注词语之间的语义关联,如施事角色、受事角色、目标角色等。
实现语义角色标注可以采用机器学习的方法,通过构建训练数据集,训练一个能够自动标注语义角色的模型。
该模型可以使用多种特征表示,如词性、依存关系、上下文等,来预测词语的语义角色标签。
此外,还可以结合语义角色标注和其他语义分析技术,进一步提高语义分析的准确性和效果。
三、情感分析情感分析技术是一种通过对文本、句子或语句中的情感信息进行分析的技术。
它可以识别并提取出文本中的情感极性,如积极、消极或中性。
编译原理程序设计3语义分析By坏学长一、 实验题目和要求题目:语义分析程序的设计与实现。
实验内容:编写语义分析程序,实现对算术表达式的类型检查和求值。
要求所分析算术表达式由如下的文法产生。
numE idF F F T F T T T T E T E E |)(||/|*||→→-+→ 实验要求:用自底向上的语法制导翻译技术实现对表达式的分析和翻译。
(1) 写出满足要求的语法制导定义或翻译方案。
(2) 编写分析程序,实现对表达式的类型进行检查和求值,并输出: ① 分析过程中所有产生式。
② 识别出的表达式的类型。
③ 识别出的表达式的值。
(3) 实验方法:可以选用以下两种方法之一。
① 自己编写分析程序。
② 利用YACC 自动生成工具。
二、 实验分析1. 自底向上的LR 分析 ◆ 该文法的拓广文法E' -> EE -> E + T E -> E - T E -> T T -> T *F T -> T / F T -> F F -> id F ->( E ) F ->num◆ FIRST 和FOLLOW 集◆该文法的LR(0)项目集规范族:●CLOUSURE I0E' -> .EE -> .E+TE -> .E-TE -> .TT -> .T*FT -> .T/FT -> .FF -> .idF -> .(E) F -> .num●CLOUSURE I1E' -> E. E -> E.+TE -> E.-T●CLOUSURE I2E -> T. T -> T.*FT -> T./F●CLOUSURE I3T -> F.●CLOUSURE I4F -> id.●CLOUSURE I5F -> num.●CLOUSURE I6F -> (.E) E -> .E+TE -> .E-TE -> .TT -> .T*FT -> .T/FT -> .FF -> .idF -> .(E) F -> .num●CLOUSURE I7E -> E+.TT -> .T*FT -> .T/FT -> .FF -> .idF -> .(E) F -> .num●CLOUSURE I8E -> E-.TT -> .T*FT -> .T/FT -> .FF -> .idF -> .(E) F -> .num●CLOUSURE I9T -> T*.FF -> .idF -> .(E) F -> .num●CLOUSURE I10T -> T/.FF -> .idF -> .(E) F -> .num●CLOUSURE I11F -> (E.) E -> E.+TE -> E.-T●CLOUSURE I12E -> E+T. T -> T.*FT -> T./F●CLOUSURE I13E -> E-T. T -> T.*FT -> T./F●CLOUSURE I14T -> T*F.●CLOUSURE I15T -> T/F.●CLOUSURE I16F -> (E).构造SLR(1)分析表2.S属性定义的制导翻译自底向上的制导翻译需要在LR分析的基础上进行扩展,进行综合属性的记录和计算,完成类型检查和结果计算.◆扩充分析栈目的:用于保存综合属性实现:栈由state和value类的容器类实现,state元素是指向LR(1)分析表中状态的指针(或索引),val中就存放分析树中对应的属性值。
假设综合属性刚好在每次归约前计算A->XYZ对应的语义规则是A.a=f(X.x,Y.y,Z.z)定义一个结构栈,value结构里有两个变量,一个为val, 一个为type。
Val存在两种情况,一个表示int时的值,一个表示float时的值,因为无法公用一个类型的变量。
定义type只有三种情况,一种为int, 一种为float, 一种为type_error(由于输入值只有int 和float两种类型,所以type_error即类型不同时,四则运算默认结果为float)。
◆改造分析程序综合属性记录:终结符号的综合属性值由词法分析程序产生,当分析程序执行移进操作时,其属性值随终结符号(或状态符号)一起入栈。
为每个语义规则编写一段代码,以计算属性值。
归约计算:在归约时完成类型检查和求值。
对每一个产生式A->XYZ,把属性值的计算与归约动作联系起来:归约前,执行与产生式相关的代码段归约时,右部符号及其属性出栈,左部符号及其属性入栈◆翻译方案}..),"int(",..{}..),)"(int(",..){(}..),"int(",..{}..),"int(",..{};_.;..)..({)}"/int(",./..{/};_.;..)..({)}"*int(",.*..{*}..),"int(",..{};_.;..)..({)}"int(",...{};_.;..)..({)}"int(",...{111111111111type num type F num F pr val num val F num F type E type F E F pr val E val F E F type id type F id F pr val id val F id F type F type T F T pr val F val T F T error type type T elsetype F type T type F type T if F T T pr val F val T val T F T T error type type T elsetype F type T type F type T if F T T pr val F val T val T F T T type T type E T E pr val T val E T E error type type E elsetype T type E type T type E if T E E pr val T val E val E T E E error type type E elsetype T type E type T type E if T E E pr val T val E val E T E E =→=→=→=→=→=→=→=→====→=→====→=→=→=→====-→-=-→====+→+=+→三、 主要算法分析词法分析:void Lexval (string );对输入子串进行分解,由单个string 按照不同类型,int ,float ,运算符等,得到字符串数组,方便语法分析处理。
终结符处理:相对于语法分析,扩展了栈,需要将终结符的属性即类别和数值进栈保存,运算符进栈,属性值默认-1,行为根据action 表格进行操作,action 表格以数组形式存储,根据符号位置直接定位判断行为。
int action[17][9]={{-1,-1,-1,-1,14,16,15,-1,-1},{17,18,-1,-1,-1,-1,-1,-1, 0},{ 3, 3,19,20,-1,-1,-1, 3, 3},{ 6, 6, 6, 6,-1,-1,-1, 6, 6},{ 7, 7, 7, 7,-1,-1,-1, 7, 7},{-1,-1,-1,-1,14,16,15,-1,-1},{ 9, 9, 9, 9,-1,-1,-1, 9, 9},{-1,-1,-1,-1,14,16,15,-1,-1},{-1,-1,-1,-1,14,16,15,-1,-1},{-1,-1,-1,-1,14,16,15,-1,-1},{-1,-1,-1,-1,14,16,15,-1,-1},{17,18,-1,-1,-1,-1,-1,26,-1},{ 1, 1,19,20,-1,-1,-1, 1, 1},{ 2, 2,19,20,-1,-1,-1, 2, 2},{ 4, 4, 4, 4,-1,-1,-1, 4, 4},{ 5, 5, 5, 5,-1,-1,-1, 5, 5},{ 8, 8, 8, 8,-1,-1,-1, 8, 8}};归约处理:归约的同时,按照翻译方案计算结果,归约行为根据action表格进行,同时goto表如下intgo_to[17][3]={{ 1, 2, 3},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{11,2 ,3},{-1,-1,-1},{-1,12 ,3},{-1,13 ,3},{-1,-1,14},{-1,-1,15},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}};在程序最终,输出结果result和类型type四、代码实现(见附件)#include<iostream>#include<string>#include<vector>#include<stack>#include<stdio.h>#include<stdlib.h>using namespace std;intGoto[17][3]={{ 1, 2, 3},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{11, 2, 3},{-1,-1,-1},{-1,12 ,3},{-1,13 ,3},{-1,-1,14},{-1,-1,15},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}};int action[17][9]={{-1,-1,-1,-1,14,16,15,-1,-1},{17,18,-1,-1,-1,-1,-1,-1, 0},{ 3, 3,19,20,-1,-1,-1, 3, 3},{ 6, 6, 6, 6,-1,-1,-1, 6, 6},{ 7, 7, 7, 7,-1,-1,-1, 7, 7},{-1,-1,-1,-1,14,16,15,-1,-1},{ 9, 9, 9, 9,-1,-1,-1, 9, 9},{-1,-1,-1,-1,14,16,15,-1,-1},{-1,-1,-1,-1,14,16,15,-1,-1},{-1,-1,-1,-1,14,16,15,-1,-1},{-1,-1,-1,-1,14,16,15,-1,-1},{17,18,-1,-1,-1,-1,-1,26,-1},{ 1, 1,19,20,-1,-1,-1, 1, 1},{ 2, 2,19,20,-1,-1,-1, 2, 2},{ 4, 4, 4, 4,-1,-1,-1, 4, 4},{ 5, 5, 5, 5,-1,-1,-1, 5, 5},{ 8, 8, 8, 8,-1,-1,-1, 8, 8}};class Value //Value类{public:Value(intType,doublenum){type = Type;val = num;};int type;doubleval;};vector <Value>ValueStack;//Value栈容器类vector <int> State;//state状态栈容器类bool error=false;//定义一个变量表示出错intlen=0;string Input[200],str;//输入缓冲区intInputType[200]={0};//将早准备好的action和go-to表准备好stringgene[10]={"E'->E","E->E+T","E->E-T","E->T","T->T*F","T->T/F","T->F","F->i","F->(E)","F-> n"};//原拓展文法char Vt[]={'+','-','*','/','i','n','(',')','$'}; //终结符集合char Vn[]={'E','T','F'}; //非终结符集合char* type[]={"int","float"}; //定义两种类型intnum_Vt=9,num_Vn=3,num_State=17,num_Gn=10; //定义一些常数,非终结符个数为9,终结符个数为3等等void Lexval(string str);//词法分析int Palce2(char c);//定位int Palce1(char c);int Judge();//判断结尾int Analysis();//分析Value Reduce(intnum);//归约int main(){inti,len;cout<<"\t\t\t【拓广文法】"<<endl;for(i=0;i<num_Gn;i++){cout<<"\t\t\t "<<i<<") "<<gene[i]<<endl;}if(Analysis()==1){cout<<"Accept!!"<<endl;len=(int)str.size();cout<<"算术表达式结果为:"<<str.substr(0,len-1)<<"="<<ValueStack[ValueStack.size()-1].val<<endl;cout<<"算术表达式的类型为:"<<type[ValueStack[ValueStack.size()-1].type]<<endl;}else if(Analysis()==0)cout<<"不可接受字符串!"<<endl;system("pause");}int Palce2(char c)//寻找非终结符的位置{for(inti=0;i<3;i++){if(Vn[i]==c)returni;}return -1;}int Palce1(char c)//寻找终结符位置{for(inti=0;i<9;i++){if(Vt[i]==c)returni;}return -1;}int Judge()//判断是不是"$"{intlen=(int)str.size();if(str[len-1]!='$')return 0;else return 1;}int Analysis()//对输入串进行分析的函数{intip=0,S,a,i,top;cout<<"请输入运算表达式"<<endl;cin>>str;while(!Judge()){cout<<"输入错误,请以$作为输入终止符。