niusouti.com
更多“编译程序对C语言源程序进行语法分析时,可以确定(22)。A.变量是否定义(或声明)B.变量的值是否正确C ”相关问题
  • 第1题:

    对高级语言源程序进行编译时,可发现源程序中的__(29)__错误。

    A.堆栈溢出

    B.变量未定义

    C.指针异常

    D.数组元素下标越界


    正确答案:B
    编译就是把高级语言变成计算机可以识别的二进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成二进制的。编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。(1)词法分析。词法分析的任务是对由字符组成的单词进行处理,从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。执行词法分析的程序称为词法分析程序或扫描器。(2)语法分析。编译程序的语法分析器以单词符号作为输入,分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等,最后看是否构成一个符合要求的程序,按该语言使用的语法规则分析检查每条语句是否有正确的逻辑结构,程序是最终的一个语法单位。(3)中间代码生成。中间代码是源程序的一种内部表示,或称中间语言。中间代码的作用是可使编译程序的结构在逻辑上更为简单明确,特别是可使目标代码的优化比较容易实现。中间代码即为中间语言程序,中间语言的复杂性介于源程序语言和机器语言之间。(4)代码优化。代码优化是指对程序进行多种等价变换,使得从变换后的程序出发,能生成更有效的目标代码。所谓等价,是指不改变程序的运行结果。所谓有效,主要指目标代码运行时间较短,以及占用的存储空间较小。这种变换称为优化。(5)目标代码生成。目标代码生成是编译的最后一个阶段。目标代码生成器把语法分析后或优化后的中间代码变换成目标代码。本题的选项A,堆栈溢出就是不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,结果覆盖了老的堆栈数据。这种错误,编译时是无法发现的,只有当运行结果出来后,才能分析出错误所在。选项C和D是在程序运行时可能出现的错误。

  • 第2题:

    编译程序对C语言源程序进行语法分析时,可以确定______。

    A.变量是否定义(或声明)

    B.变量的值是否正确

    C.循环语句的执行次数

    D.循环条件是否正确


    正确答案:A
    解析:本题考查程序语言基础知识。
      对C源程序进行编译时,需建立符号表,其作用是记录源程序中各个符号(变量等)的必要信息,以辅助语义的正确性检查和代码生成,在编译过程中需要对符号表进行快速有效地查找、插入、修改和删除等操作。符号表的建立可以始于词法分析阶段,也可以放到语法分析和语义分析阶段,但符号表的使用有时会延续到目标代码的运行阶段。

  • 第3题:

    以下有关extern变量申明的说法,错误的是()。

    A.C语言中,extern可以放在变量或函数之前,以表示该变量或函数的声明在别的文件中,提示编译器在其他模块中寻找其声明。

    B.通常extern申明变量可以有多次。

    C.extern申明的变量事实上就是全局变量。

    D.extern变量可以定义多次。


    extern 变量 可以 定义 多 次。

  • 第4题:

    编译程序对C 语言源程序进行语法分析时,可以确定 (66) 。

    A.变量是否定义(或声明)

    B.变量的值是否正确

    C.循环语句的执行次数

    D.循环条件是否正确


    正确答案:A
    本题考查程序语言基础知识。对C源程序进行编译时,需建立符号表,其作用是记录源程序中各个符号(变量等)的必要信息,以辅助语义的正确性检查和代码生成,在编译过程中需要对符号表进行快速有效地查找、插入、修改和删除等操作。符号表的建立可以始于词法分析阶段,也可以放到语法分析和语义分析阶段,但符号表的使用有时会延续到目标代码的运行阶段。

  • 第5题:

    对高级语言源程序进行编译时,可发现源程序中的( )错误。

    A.堆栈溢出
    B.变量未定义
    C.指针异常
    D.数组元素下标越界

    答案:B
    解析:
    本题考查编译过程基本知识。高级语言源程序中的错误分为两类:语法错误和语义错误,其中语义错误又可分为静态语义错误和动态语义错误。语法错误指语言结构上的错误,静态语义错误指编译时就能发现的程序含义上的错误,动态语义错误只有在程序运行时才能表现出来。堆栈溢出、指针异常和数组元素下标越界都是程序运行中才能出现的问题,而遵循先声明后引用原则的程序语言必须先定义变量,然后才能使用,否则编译器会在语法分析阶段指出变量未定义错误。