• 词法分析,语法分析,语义分析


    知识点

    词法分析

    词法分析任务,是在输入源程序时对构成源程序的字符串进行扫描分解,识别出一个个的单词,删除无用的信息,并报告分析出来的错误。"单词"符号是程序设计语言的基本语法单位,如关键字(保留字)、标识符、常数、运算符、分隔符 等。

    语法分析

    语法分析的任务在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位。如“表达式”、“语句”、“程序”等。语法分析程序判断源程序在结构上是否正确,源程序的结构由上下文无关文法描述。

    语义分析

    语义分析阶段的任务主要检查源程序是否存在语义错误,并收集类型信息供后面代码生成阶段使用。

    试题

    以编译方式翻译C/C++源程序的过程中,( )阶段的主要任务是对各条语句的结构进行合法性分析。

    A.词法分析        B.语义分析        C.语法分析        D.目标代码生成

    【答案】C

    【解析】词法分析阶段依据语言的词法规则,对源程序进行逐个字符地扫描,从中识别出一个个“单词”符号,主要是针对词汇的检查。

    语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”“语句”和“程序”等。

    语法规则就是各类语法单位的构成规则,主要是针对结构的检查。语义分析阶段分析各语法结构的含义,检查源程序是否包含语义错误,主要针对句子含义的检查。

    以编译方式翻译C/C++源程序的过程中,类型检查在( )阶段处理。

    A.词法分析        B.语义分析        C.语法分析        D.目标代码生成

    【答案】B

    【解析】词法分析阶段依据语言的词法规则,对源程序进行逐个字符地扫描,从中识别出一个个“单词”符号,主要是针对词汇的检查。

    语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”“语句”和“程序”等。

    语法规则就是各类语法单位的构成规则,主要是针对结构的检查。语义分析阶段分析各语法结构的含义,检查源程序是否包含语义错误,主要针对句子含义的检查。

    编译过程中进行的语法分析主要是分析()

     A.源程序中的标识符是否合法         B.程序语句的含义是否合法

    C.程序语句的结构是否合法         D.表达式的类型是否合法

    【答案】C

    【解析】语法分析的任务是根据语言的语法规则分析单词串是否构成短语和句子,即表达式,语句和程序等基本语言结构,同时判断源程序在结构上是否正确

    在以阶段划分的编译过程中,判断程序语句的形式是否正确属于(  ) 阶段的工作。

    A.词法分析         B.语法分析         C.语义分析         D.代码生成

    【答案】B

    【解析】出现语句选语法分析。

    乔姆斯基(Chomsky)将文法分为4种类型,程序设计语言的大多数语法现象可用其中的( )描述。

    A.上下文有关文法         B.上下文无关文法         C.正规文法         D.短语结构文法

    【答案】B

    【解析】上下文无关文法:形式语言理论中一种重要的变换文法,用来描述上下文无关语言,在乔姆斯基分层中称为2型文法。由于程序设计语言的语法基本上都是上下文无关文法,因此应用十分广泛。

    运行下面的C程序代码段,会出现()错误。

    int k=0;

    for(;k<100;);

    {k++;}

    A.变量未定义         B.静态语义         C.语法         D.动态语义

    【答案】D

    【解析】在本题中,for语句后有“;”号,说明该循环语句的语句体为空,此时,循环会是一个死循环,所以存在语义错误。

    某程序运行时陷入死循环,则可能的原因是程序中存在()

    A.词法错误 B.语法错误 C.动态的语义错误 D.静态的语义错误

    【答案】C

    【解析】本题考查程序语目基础知识。

    程序已经开始运行,说明编译时无错误,因此不是语法错误和词法错误,编译时发现的语义错误称为静态的语义错误。运行时陷入死循环属于动态语义错误。

    对高级语言源程序进行编译或解释的过程可以分为多个阶段,解释方式不包含()阶段。

    A.词法分析         B.语法分析         C.语义分析         D.目标代码生成

    【答案】D

    【解析】本题考查程序语言基础知识。

    用某种高级语言或汇编语言编写的程序称为源程序,源程序不能直接在计算机上执行。汇编语言源程序需要用一个汇编程序将其翻译成目标程序后才能执行。高级语言源程序则需要对应的解释程序或编译程序对其进行翻译,然后在机器上运行。

    解释程序也称为解释器,它或者直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行;而编译程序(编译器)则是将源程序翻译成目标语言程序,然后在计算机上运行目标程序。这两种语言处理程序的根本区别是:在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程; 而在解释方式下,解释程序和源程序(或其某种等价表示)要参与到程序的运行过程中, 运行程序的控制权在解释程序,。简单来说,在解释方式下,翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立保存的目标程序。

     

  • 相关阅读:
    Tomcat启动闪退问题解决方法
    烧脑问题解决办法:如何选择一款合适自己的手机流量卡
    基于PHP+MySQL的动漫交流及动漫周边购物网站
    C语言深度解析:函数的形参和实参与传值和传址(多角度分析,让你有一种相见恨晚的感觉!!!!)
    linux服务器上的matplotlib中文字体乱码问题(使用ttf文件)
    C++11新特性:原始(raw)字符串
    [JavaScript 刷题] 树 - 二叉搜索树迭代器, leetcode 173
    [【linux_centOS】]没有javac 编译命令,安装它的时候又没dnf命令,真搞人心态啊!!!
    【计算机网络OSI模型分层,TCP/IP模型】 --- 史上最详细的解读
    js数组方法重写——pop、push、shift、unshift、every、some、filter、map、forEach
  • 原文地址:https://blog.csdn.net/qq_29385297/article/details/124991537