免费智能真题库 > 历年试卷 > 软件设计师 > 2020年下半年 软件设计师 上午试卷 综合知识
  第49题      
  知识点:   编译程序的基本原理   程序设计   CF   程序设计语言   文法
  章/节:   计算机软件知识       

 
程序设计语言的大多数语法现象可以用CFG (上 下文无关文法)表示。下面的CFG产生式集用于描述简单算术表达式,其中+、-、*表示加、减、乘运算,id表示单个字母表示的变量,那么符合该文法的表达式为(  )。
P:E→E+T|E-T|T
T→T*F|F
F→-F|id
 
 
  A.  a+-b-c
 
  B.  a*(b+c)
 
  C.  a*-b+2
 
  D.  -a/b+c
 
 
 

 
  第48题    2012年下半年  
   18%
将高级语言源程序翻译成目标程序的是(48)
  第21题    2021年下半年  
   60%
对高级程序语言进行编译的过程中,使用()来记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成。
  第21题    2011年上半年  
   25%
算术表达式采用逆波兰式表示时不用括号,可以利用(20)进行求值。与逆波兰式ab-cd+*对应的中缀表达式是(21)。
   知识点讲解    
   · 编译程序的基本原理    · 程序设计    · CF    · 程序设计语言    · 文法
 
       编译程序的基本原理
               编译过程概述
               编译程序的功能是把用高级语言书写的源程序翻译成与之等价的目标程序。编译过程划分成词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成6个阶段,实际的编译器可能会将其中的某些阶段结合在一起进行处理,比如说表格管理和出错处理与上述6个阶段都有联系。
               1)词法分析阶段
               词法分析阶段的任务是对源程序从前到后(从左到右)逐个字符进行扫描,从中识别出一个个"单词"符号。"单词"符号是程序设计语言的基本语法单位,如关键词、标识符等。词法分析程序输出的"单词"常常采用二元组的方式,即单词类别和单词自身的值。
               2)语法分析阶段
               语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如"表达式""语句"和"程序"等。
               词法分析和语法分析本质上都是对源程序的结构进行分析。
               3)语义分析阶段
               语义分析阶段主要是审查源程序是否存在语义错误,并收集类型信息供后面的代码生成阶段使用,只有语法和语义都正确的源程序才能翻译成正确的目标代码。语义分析的一个主要工作是进行类型分析和检查。
               4)中间代码生成阶段
               中间代码是一种结构简单且含义明确的记号系统,可以有多种形式。中间代码的设计原则主要有两点:一是容易生成;二是容易被翻译成目标代码。中间代码生成阶段的工作就是根据语义分析的输出生成中间代码。
               语义分析和中间代码生成所依据的是语言的语义规则。
               5)代码优化阶段
               代码优化阶段的任务是对前阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间。优化过程可以在中间代码生成阶段进行,也可以在目标代码生成阶段进行。
               6)目标代码生成阶段
               目标代码生成阶段的任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码。这是编译的最后阶段,它的工作与具体的机器密切相关。
               7)符号表管理
               符号表管理阶段的任务是在符号表中记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成。符号表的建立可以始于词法分析阶段,也可以放到语法分析阶段,但符号表的使用有时会延续到目标代码的运行阶段。
               8)出错处理
               用户编写的源程序中的错误大致可分为静态错误和动态错误。动态错误也称为动态语义错误,指程序中包含的逻辑错误。静态错误是指编译阶段发现的程序错误,可分为语法错误和静态语义错误。出错处理程序的任务包括检查错误、报告出错信息、排错、恢复编译工作。
               文法和语言的形式描述
               1)文法的定义
               描述语言语法结构的形式规则称为文法。文法G是一个四元组,可表示为G=(VN,VT,P,S),其中VT是一个非空有限集,其中的每个元素称为一个终结符;VN是一个非空有限集,其每个元素称为非终结符。VNVT=?。P是产生式的有限集合,每个产生式是形如α→β的规则,其中α称为产生式的左部,β称为产生式的右部。SVN,称为开始符号,它至少要在一条产生式中作为左部出现。
               2)文法的分类
               乔姆斯基把文法分成4种类型,即0型、1型、2型和3型。
               0型文法也称为短语文法,其能力相当于图灵机。
               (1)1型文法也称为上下文有关文法,这种文法意味着对非终结符的替换必须考虑上下文,并且一般不允许替换成ε串,此文法对应于线性有界自动机。
               (2)2型文法是上下文无关文法,对非终结符的替换无须考虑上下文,它对应于下推自动机。
               (3)3型文法等价于正规式,因此也称为正规文法或线性文法,它对应于有限状态自动机。
               3)句子和语言
               设有文法G=(VN,VT,P,S)
               (1)推导和直接推导。从文法的开始符号S出发,反复使用产生式,将产生式左部的非终结符替换为右部的文法符号序列,直至产生一个终结符的序列时为止。若有产生式α→β∈P,γ,δ∈V*,则γαδ?γβδ称为文法G中的一个直接推导。
               (2)直接归约和归约。若文法G中有一个直接推导α?β,则称α是β的一个直接归约;若文法G中有一个推导,则称γ是δ的一个归约。
               (3)句型和句子。若文法G的开始符号为S,那么,从开始符号S能推导出的符号串称为文法的一个句型,即α是文法G的一个句型,当且仅当有以下推导,α∈V*,若X是文法G的一个句型,且XV*T,则称X是文法G的一个句子。
               (4)语言。从文法G的开始符号出发,所能推导出的句子的全体称为文法G产生的语言,记为L(G)。
               (5)文法的等价。若文法G,与文法G2产生的语言相同,即L(G1)=L(G2),则称这两个文法是等价的。
               词法分析
               1)正规表达式和正规集
               对于字母表∑,其上的正规表达式(也称正则表达式,简称正规式)及其表示的正规集可以递归定义如下。
               (1)ε是一个正规式,它表示集合L(ε)={ε}。
               (2)若a是∑上的字符,则a是一个正规式,它所表示的正规集为{a}。
               (3)若正规式rs分别表示正规集L(r)和L(s),则
               ①r|s是正规式,表示集合L(r)∪L(s)。
               ②r.s是正规式,表示集合L(r)L(s)。
               ③r*是正规式,表示集合(L(r))*
               ④(r)是正规式,表示集合L(r)。
               仅由有限次地使用上述3个步骤定义的表达式才是∑上的正规式,其中运算符"|"".""*"分别称为"或""连接"和"闭包"。若两个正规式表示的正规集相同,则认为两者等价。
               2)有限自动机
               有限自动机是一种识别装置的抽象概念,它能够正确地识别正规集。
               (1)确定的有限自动机。
               一个确定的有限自动机(DFA)是个五元组:(S,∑,fs0Z),其中:
               ①S是一个有限集,其每个元素称为一个状态。
               ②∑是一个有限字母表,其每个元素称为一个输入字符。
               ③f是从S×∑→S上的单值部分映像。
               ④s0S是唯一的一个开始状态。
               ⑤Z是非空的终止状态集合。
               一个DFA可以用两种直观的方式表示,即状态转换图和状态转换矩阵。状态转换图简称为转换图,它是一个有向图。DFA中的每个状态对应转换图中的一个节点,DFA中的每个转换函数对应图中的一条有向弧,若转换函数为f(A,a)=Q,则该有向弧从节点A出发,进入节点Q,字符a是弧上的标记。状态转换矩阵可以用一个二维数组M表示,矩阵元素的行下标表示状态,列下标表示输入字符,M[A,a]的值是当前状态为A、输入为a时应转换到的下一状态。在转换矩阵中,一般以第一行的行下标所对应的状态作为初态,而终态则需要特别指出。
               (2)不确定的有限自动机。
               一个不确定的有限自动机(NFA)也是一个五元组,它与确定的有限自动机的区别如下。
               ①f是从S×∑→2S上的映像。对于S中的一个给定状态及输入符号,返回一个状态的集合。
               ②有向弧上的标记可以是ε。
               显然,DFA是NFA的特例。
               实际上,对于每个NFAM,都存在一个DFAN,且L(M)=L(N)。
               对于任何两个有限自动机M1M2,如果L(M1)=L(M2),则称M1M2是等价的。
               3)NFA到DFA的转换
               设NFAN=(S,∑,f,s0Z),与之等价的DFAM=(S',∑,f',q0,Z'),用子集法将非确定的有限自动机确定化的算法步骤如下。
               (1)求出DFAM的初态q0,此时S'仅含初态q0,并且没有标记。
               (2)对于S'中尚未标记的状态qi={si1,si2,…,sim}和sij∈(j=1,2,…,m)进行下述处理。
               ①标记qi
               ②对于每个a∈∑,令T=f(si1,si2,…,sim,a),qj=ε_CLOSURE(T)。
               ③若qi尚不在S'中,则将qj作为一个未加标记的新状态添加到S',并把状态转换函数f'(qi,a)=qj添加到DFAM
               (3)重复步骤(2),直到S'中不再有未标记的状态时为止。
               (4)令Z'={q|qS'且qZ≠?}。
               注:I是NFAN的状态集合的一个子集,其中ε_CLOSURE(I)的定义如下。
               ①状态集I的ε_CLOSURE(I)是一个状态集。
               ②状态集I的所有状态属于ε_CLOSURE(I)。
               ③若sI中,那么从s出发经过任意条ε弧到达的状态s'都属于ε_CLOSURE(I)。
               从NFA转换得到的DFA不一定是最简化的,可以通过等价变换将DFA进行最小化处理。
               4)正规式与有限自动机之间的转换
               (1)对于∑上的NFAM,可以构造一个∑上的正规式R,使得L(R)=L(M)。
               构造过程分以下两步进行。
               ①在M的状态转换图中加两个节点xy
               ②按下图所示的方法逐步消去M中的除xy的所有节点。
               
               状态转换图(消去中间节点)
               (2)对于∑上的每一个正规式R,可以构造一个∑上的NFAM,使得L(M)=L(R)。
               (3)构造过程分两步进行。
               ①对于正规式R,可用如下图所示的拓广状态图表示。
               
               拓广状态图
               ②通过对正规式R进行分裂并加入新的节点,逐步把图转变成每条弧上的标记是∑上的一个字符或ε,转换规则如下图所示。
               
               状态转换图(加入新节点)
               5)词法分析器的构造
               词法分析器的构造过程如下。
               (1)用正规式描述语言中的单词构成规则。
               (2)为每个正规式构造一个NFA,用于识别正规式所表示的正规集。
               (3)将构造出的NFA转换成等价的DFA。
               (4)对DFA进行最小化处理,使其最简。
               (5)根据DFA构造词法分析器。
               语法分析
               语法分析的任务是根据语言的语法规则,分析单词串是否构成短语和句子,同时检查和处理程序中的语法错误。根据产生语法树的方向,语法分析可分为自底向上和自顶向下两类。
               自顶向下的分析是对给定的符号串,试图自顶向下地为其构造一棵语法树,或者说从文法的开始符号出发,为其构造一个最佳推导。
               自底向上的分析是对给定的符号串,试图自底向上地为其构造一棵语法树,或者说从给定的符号串本身出发,试图将其归约为文法的开始符号。
               算符优先文法属于自底向上的分析法,它利用各个算符间的优先关系和结合规则来进行语法分析,特别是用于分析各种表达式。算符优先文法的任何产生式的右部都会出现两个非终结符相邻的情况,且任何一对终结符之间至多只有3种算符关系,即">""<"和"="之一成立。
               中间代码优化
               1)局部优化
               局部优化是在基本块上的优化。基本块是指程序中一个顺序执行的语句序列,其中只有一个入口和一个出口。划分基本块的方法如下。
               (1)求出四元式程序中各个基本块的入口语句。
               (2)对每一入口语句,构造其所属的基本块。它是由该语句到下一入口语句(不包括下一入口语句),或到一条转移语句(包括该转移语句),或到一条停语句(包括该停语句)之间的语句序列组成的。
               (3)凡未被纳入某一基本块的语句,都是程序中控制流程无法到达的语句,因而也是不会被执行到的语句,因此可以把它们删除。
               一个基本块可以用一个DAG(有向无环)图表示。在一个基本块内,通常可进行以下3种优化,即合并已知量、删除无用赋值和删除多余运算。
               2)控制流图和循环优化
               (1)控制流图。
               一个程序的控制流图是一个有向图,其节点是程序中的基本块,它有唯一的首节点,即包含程序第一条语句的基本块,从首节点出发,到控制流图中的每个节点都存在路径。
               由程序的各基本块构造相应控制流图的方法是:对于程序中的两个基本块BiBj,若Bj紧接着Bi被执行,则从Bi引一条有向边到Bj,称BiBj的直接前驱,BjBi的直接后继。
               (2)循环优化。
               循环就是控制流图中具有唯一入口节点的强连通子图,从循环外进入循环时,必须首先经过循环的入口节点。
               基于循环的优化处理有代码外提、强度削弱、删除归纳变量等。
               目标代码生成
               代码生成器以经过语义分析或优化后的中间代码为输入,以特定的机器语言或汇编代码为输出。代码生成主要考虑以下问题,即中间代码形式、目标代码形式、寄存器的分配、计算次序的选择。
 
       程序设计
               类和继承
               1)类
               一个类是一些属性和方法的封装体,类的定义用关键字class声明,用关键字public、protected、 private指定类的成员的存取控制属性:private(私有)成员只有类内部的方法才能访问,protected(保护)成员派生类和同一文件夹下的类可以访问,public(公有)成员可以从类的外部访问。默认是public。这体现了面向对象的以下指导思想:尽量将类内部的细节隐藏起来,对类的属性的操作应该通过类的方法来进行。
               另外,public还可以用来修饰类,public类能够被其他文件夹下的类访问,非public类只能被同一文件夹下的类访问。一个.java文件中可以包含多个类,会被编译成多个.class文件,但只能有一个public类,而且该类名要和文件名一样。
               2)继承
               Java中用关键字extends表示类间的继承关系。父类的公有属性和方法成为子类的属性和方法,子类如果有和父类的同名、同参数类型的方法,那么子类对象在调用该方法时,调用的是子类的方法,亦即方法的重置。如果想要调用父类的同名方法,需要用super关键字(属性同理)。
               子类的对象可以作为祖先类的对象使用,即所谓类的向上转换,反之则不行。具体表现在:可以用子类对象来对祖先类对象赋值,可以用子类对象作为实参去调用以父类对象为形参的函数。
               对象的引用本质
               Java中的对象实际上是对象的引用,本质上和C语言中的指针是一样的;但也和C语言指针不尽相同,例如,不能自增、自减,不能强制转换成其他类型。
               例如:
               
               构造方法
               构造方法就是类的对象生成时会被调用的方法。每个类至少有一个构造方法(Constructor),也称构造函数。构造方法的名字和类名相同,没有任何返回类型。每个类都有一个默认的构造方法,但当用户自定义了构造方法后,默认的构造函数就不再有效了。
               重载
               同一个类中的两个或两个以上方法,名字相同,而参数个数不同或参数类型不同,称为重载。注意:不能有各方法名字和参数都一样,而仅仅返回值类型不同。
               静态属性和静态方法
               静态属性和静态方法的声明用关键字static实现,一个类的静态属性只有一份,由所有该类的对象共享。不需要创建对象也能访问类的静态属性和方法,访问方式为"类名.静态属性或静态方法",静态方法与对象无关,因此不能在静态方法中访问非静态属性和调用非静态方法。
               this和super关键字
               这两个关键字颇为重要。this代表当前对象,super代表当前对象的父类的东西。
               this主要用途有以下两个。
               (1)一个构造函数调用另一个构造函数,对构造函数的调用必须是第一条语句。
               (2)将对象自身作为参数来调用一个函数。
               super的用途如下:在子类中调用父类的同名方法,或在子类的构造函数中调用父类的构造函数,此时亦必须是第一条语句。
               多态
               所谓多态,是指通过基类对象调用一个基类和派生类都有的方法时,在运行时才能确定到底调用的是基类的方法还是派生类的方法。多态的好处是增加了程序的可扩展性。多态是通过动态联编实现的,即编译时不确定,程序运行时才确定调用哪个函数。
               抽象类与接口
               1)抽象类
               抽象类通过关键字abstract实现,抽象类的目的是定义一个框架,规定某些类必须具有的一些共性。
               包含抽象方法的类一定是抽象类,所谓抽象方法是指没有函数体的方法。
               抽象类的直接派生类必须实现其抽象方法;抽象类只能用于继承,不能创建对象。
               2)接口(Interface)
               接口用关键字interface声明,只能用于继承。注意:此时关键字为implements(实现)。接口用于替代多继承的概念,能实现多继承的部分特点,又避免了多继承的混乱,还能起到规定程序框架的作用。注意:接口也可以用于多态。
               直接继承了接口的类,必须实现接口中的抽象方法;间接的则可以实现,也可以不实现。
               3)抽象类与接口的异同
               接口和抽象类都不能创建对象。
               抽象类不能参与多继承,抽象类可以有非静态的成员变量,可以有非抽象方法;接口可以参与多继承,所有属性都是静态常量,所有方法都是public抽象方法。
               异常处理
               1)异常概念
               异常,即出错,比如0作为除数、找不到类、打开文件错误、数组越界等。异常如果不进行处理,那么程序运行就会结束;如果进行处理,那么会在执行完异常处理代码后继续运行。
               Java中所有异常类均继承自类Exception。
               Java中的异常类层次结构如下:
               
               此外,还有EOFException、 FileNotFoundException、 MalformedURLException等。
               2)捕获异常
               异常处理的典型用法如下,将可能出现异常的代码放在try块中,其后由一个或多个catch捕获相应异常进行处理,注意只执行第一个匹配的catch块,忽略后面的。
               
               如果某个方法中所产生的异常该方法自己没有处理,那么可以在调用该方法的方法中进行处理,如果自己处理了,那么调用它的方法就无法得到该异常。
               3)抛出异常
               异常除了运行中系统产生的之外,也可以主动抛出异常,用关键字throw,如throw new Exception()。注意:throw只能抛出Throwable子类的异常。
               4)带throws关键字的方法
               带throws关键字的方法声明如下:
               
               强制调用该方法的方法必须处理可能发生的异常,或者将异常重新定向。假定方法A带throws关键字,而方法B中调用了方法A,则方法B中必须有处理方法A中可能产生的异常的语句,或者方法B也带throws关键字,指明调用方法B的方法必须处理异常。
               final关键字
               用final关键字定义的常量,在其初始化或第一次赋值后,其值不能被改变。常量必须先有值,然后才能使用。对于常量的第一次赋值只能在构造函数中进行。
               final对象的值不能被改变,指的是该对象不能再指向其他对象,而不是指不能改变当前对象内部的属性值。
               函数参数声明为final后,函数中不能改变其值。
               final方法是不能被重置的方法。
               final类不能被继承,其所有方法都是final的,但属性可以不是final的。
 
       CF
        CF(Compact Flash)。CF卡由SanDisk公司与1994年生产,并制定了相关规范,其用于便携式电子设备的数据存储设备。它革命性的使用了闪存技术。CF卡采用闪存(flash)技术,是一种稳定的存储解决方案,不需要电池来维持其中存储的数据。对所保存的数据来说,CF卡比传统的磁盘驱动器安全性和保护性都更高;比传统的磁盘驱动器及Ⅲ型PC卡的可靠性高5~10倍,而且CF卡的用电量仅为小型磁盘驱动器的5%。这些优异的条件使得大多数数码相机选择CF卡作为其首选存储介质。
        Compact Flash的电气特性与PCMCIA-ATA接口一致,但外形尺寸较小。连接器的宽度为43mm宽,外壳的深度是36mm,厚度分3.3mm(CF Ⅰ型卡)和5mm(CF Ⅱ型卡)两种。CF Ⅰ型卡可以用于CF Ⅱ型卡插槽,但CF Ⅱ型卡由于厚度的关系无法插入CF Ⅰ型卡的插槽中。CF闪存卡多数是CF Ⅰ型卡。
        CF接口已广泛用于PDA、笔记本电脑、数码相机和包括台式机在内的各种设备。
 
       程序设计语言
        程序设计语言(Programming Language)是用于编写计算机程序的语言。语言的基础是一组记号和一组规则,根据规则由记号构成的记号串的总体就是语言。在程序设计语言中,这些记号串就是程序。程序设计语言包含三个方面,即语法、语义和语用。语法表示程序的结构或形式,即表示构成程序的各个记号之间的组合规则,但不涉及这些记号的特定含义,也不涉及使用者。语义表示程序的含义,即表示按照各种方法所表示的各个记号的特定含义,但也不涉及使用者。语用表示程序与使用的关系。
        程序设计语言的基本成分有:数据成分,用于描述程序所涉及的数据;运算成分,用以描述程序中所包含的运算;控制成分,用以描述程序中所包含的控制;传输成分,用以表达程序中数据的传输。
        程序设计语言按照语言级别可以分为低级语言和高级语言。低级语言有机器语言和汇编语言。低级语言与特定的机器有关、功效高,但使用复杂、繁琐、费时、易出差错。机器语言是表示成数码形式的机器基本指令集,或者是操作码经过符号化的基本指令集。汇编语言是机器语言中地址部分符号化的结果,或进一步包括宏构造。高级语言的表示方法要比低级语言更接近于待解问题的表示方法,其特点是在一定程度上与具体机器无关,易学、易用、易维护。常见的有Java、C、C++、PHP、Python和Delphi等。这类语言与人们使用的自然语言比较接近,大大提高了程序设计的效率。
 
       文法
        描述语言语法结构的形式规则称为文法。文法G是一个四元组,可表示为G=(VNVTPS)。其中VT是一个非空有限集,其每个元素称为一个终结符;VN是一个非空有限集,其每个元素称为非终结符。VNVT=Φ,即VNVT不含公共元素。令V=VNVT,称V为文法G的词汇表,V中的符号称为文法符号,包括终结符和非终结符。SVN,称为开始符号,它至少要在一条产生式中作为左部出现。P是产生式的有限集合,每个产生式形如“αβ”。其中,α称为产生式的左部,αV+α中至少含有一个非终结符;β称为产生式的右部,且βV*。若干个产生式αβ1αβ2,…,αβn的左部相同时,可简写为αβ1β2|…|βn,称βi(1≤in)为α的一个候选式。
        (1)文法的分类。乔姆斯基(Chomsky)把文法分成4种类型,即0型、1型、2型和3型。这4类文法之间的差别在于对产生式要施加不同的限制。若文法G=(VNVTPS)的每个产生式αβ,均有α∈(VNVT*α至少含有一个非终结符,且β∈(VNVT*,则称G为0型文法。对0型文法的每条产生式分别施加以下限制,则可得以下文法:
        .1型文法:G的任何产生式αβSε除外)均满足|α|≤|β|(|x|表示x中文法符号的个数)。
        .2型文法:G的任何产生式形如Aβ,其中AVNβ∈(VNVT*
        .3型文法:G的任何产生式形如AaAaB(或者ABa),其中ABVNaVT
        0型文法也称为短语文法,其能力相当于图灵机,任何0型语言都是递归可枚举的;反之,递归可枚举集也必定是一个0型语言。1型文法也称为上下文有关文法,它意味着对非终结符的替换必须考虑上下文,并且一般不允许替换成ε串。例如,若αAβαγβ是1型文法的产生式,αβ不全为空,则非终结符A只有在左边是α,右边是β的上下文中才能替换成γ。2型文法就是上下文无关文法,其非终结符的替换无需考虑上下文。3型文法等价于正规式,因此也被称为正规文法或线性文法。
        若文法G1与文法G2产生的语言相同,即LG1)=LG2),则称这两个文法是等价的。
        (2)句子和语言。设有文法G=(VNVTPS)。
        .推导与直接推导:推导就是从文法的开始符号S出发,反复使用产生式,将产生式左部的非终结符替换为右部的文法符号序列(展开产生式用表示),直到产生一个终结符的序列时为止。若有产生式αβP,且γδV*,则称为文法G中的一个直接推导,并称γαδ可直接推导出γβδ。显然,对P中的每一个产生式αβ都有。若在文法中存在一个直接推导序列,即,则称α0可推导出αnαnα0的一个推导,并记为。用记号表示α0=αn或者
        .直接归约和归约:归约是推导的逆过程。若文法G中有一个直接推导,则称β可直接归约成α,或αβ的一个直接归约。若文法G中有一个推导,则称δ可归约成γ,或γδ的一个归约。
        .句型和句子:若文法G的开始符号为S,那么,从开始符号S能推导出的符号串称为文法的一个句型,即α是文法G的一个句型,当且仅当有如下推导,α∈V*。若X是文法G的一个句型,且,则称X是文法G的一个句子,即仅含终结符的句型是一个句子。
        .语言:从文法G的开始符号出发,能推导出的句子的全体称为文法G产生的语言,记为LG)。
   题号导航      2020年下半年 软件设计师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第49题    在手机中做本题