|
|
|
|
移动端

1.15 编译原理(1)

《程序员面试笔试真题与解析》本书针对当前各大 IT企业面试笔试中特性与侧重点,精心挑选了 3年以来近百家典型 IT企业的面试笔试真题,这些企业涉及业务包括系统软件、搜索引擎、电子商务、手机 APP、安全关键软件等,面试笔试真题非常具有代表性与参考性。本节为大家介绍编译原理。

作者:猿媛之家来源:机械工业出版社|2017-12-06 18:29

年前最后一场技术盛宴 | 1月27日与京东、日志易技术大咖畅聊智能化运维发展趋势!


1.15 编译原理(1)

【真题 209】可以完成编写一个 C语言编译器的语言是()。

A.汇编 B.C语言 C.VB D.以上全可以答案:D。编译器的目的就是把编程语言编译成为汇编语言或者机器语言,主要是词法分析、语法分析、语义

分析等。从理论上讲,用任何程序设计语言都可以编写一个 C语言编译器。因此,选项 D正确。

【真题 210】程序开发中,编译器的主要作用是()。

A.代码编辑功能 B.检查代码规范性

C.分析代码中问题 D.完成源语言与目标语言的转换

答案:D。

编译器的主要功能就是把源代码翻译成能在机器上执行的目标代码。

对于选项 A和选项 B,对代码的编辑和规范检查都是由编辑器来负责的,而不是编译器。所以,选项 A与选项 B错误。

对于选项 C,分析代码中的问题是由调试器来完成的。所以,选项 C错误。

对于选项 D,编译器的作用就是把源语言转换成目标语言。所以,选项 D正确。

【真题 211】下面关于编译器与解释器的描述中,错误的是()。

A.解释器不产生目标程序,它直接执行源程序或者源程序的内部形式

B.解释程序和编译程序的主要区别在于是否产生目标程序

C.编译器对高级语言程序的处理过程划分成词法分析、语法分析、语义分析,中间代码生成、代码优化、目标代码生成几个阶段

D.解释器参与运行控制、程序执行的速度快

答案:D。

【真题 212】在 C++程序中调用被 C编译器编译后的函数,为什么要加 extern"C"声明?

答案:extern是 C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其他模块中使用。 extern "C"的作用是实现 C++语言与 C语言及其他语言的混合编程。被 extern "C"修饰的变量和函数是按照 C语言方式编译和连接的,而不是 C++语言的。由于 C++语言支持函数重载,因此,编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而 C语言并不支持函数重载,因此,在编译 C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。例如如果使用 C语言开发了一个 DLL库,为了让 C++语言也能够调用 DLL输出(Export)的函数,此时需要使用 extern "C"来强制编译器不要修改函数名。

【真题 213】当 C++语言调用 C语言库时,需要添加()。

答案:extern。

C++语言是一种面向对象编程语言,它支持函数重载,而 C 语言是一种面向过程的编程语言,它不支持函数重载,所以,函数被 C++编译器编译后在库中的名字与 C 语言的不同。例如,如果声明一个 C语言函数 float f(int a,char b),C++的编译器就会将这个名字变成像 _f_int_char之类的东西以支持函数重载。然而,C语言编译器的库一般不执行该转换,所以,它的内部名为 _f,这样链接器将无法解释 C++语言对 C语言函数 f()的调用。

C++语言提供了 C 语言 Alternate likage specifications(替代链接说明)符号 extern"C"来解决名字匹配问题,它告诉编译器在编译的时候对函数名用 C语言的规则来编译而不是采用 C++的规则。使用方法为 extern后跟一个字符串来指定想声明的函数的链接类型,后面是函数声明。如下例:

extern "C" float f(int a,char b);

该语句的目的是告诉编译器不需要做函数名转换,直接找函数名为 f的函数即可。

extern还有另外一个作用,在 C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该

关键字告诉编译器,其声明的函数和变量可以在模块或其他模块中使用。

【真题 214】有如下规约:

  1. digit->0|1|…|9  
  2. digits->digit digit*  
  3. optionalFraction ->.digits|ε  
  4. optionalExponent ->(E(+|-|ε)digits)|ε  
  5. number -> digits optionalFraction optionlExponent 

上面给出的正则规约的描述中,下面的无符号数中,不符合规约要求的是(A.5280 B.1 C.2.0   D.336E答案:D。 )。

正则表达式又称正规表示法、常规表示法( Regular Expression,在代码中常简写为 regex、regexp或 RE),它是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。 *表示匹配前面的子表达式零次或多次 (大于等于 0次)。例如,zo*能匹配“z”,“zo”以及“zoo”。*等价于{0,}。

对于选项 A和选项 B,在正则表达式 number -> digits optionalFraction optionlExponent中,只匹配 digits就可以了,optionalFraction和 optionlExponent都匹配ε即可。所以,选项 A与选项 B都是正确的。对于选项 C,在正则表达式 number->digits optionalFraction optionlExponent中,只匹配 digits和

optionalFraction,digits匹配为 2;optionalFraction->.digits|ε匹配.digits,这个 digits匹配为 0。所以,选项 C正确。对于选项 D,字符 E后面必须要跟一个 digits才可以,即 E不可能为结束字符。所以,选项 D不正确。

【真题 215】下列正则表达式中,不可以匹配字符串“ www.alibaba-inc.com”的是()。

A.^\w+\.\w+\-\w+\.\w+$ B.[w]{0,3}.[a-z\-]*.[a-z]+

C.[c-w.]{3,10}[.][c-w.][.][a]  D.[w][w][w][alibaba-inc]+[com]+ 答案:C、D。要想求解本题,首先要弄懂正则表达式的原理。本题中,对于选项 A与选项 B,都可以匹配字符串

“www.alibaba-inc.com”。所以,选项 A与选项 B正确。对于选项 C,无法匹配字符串“ .com”。所以,选项 C错误。对于选项 D,由于没有与中间的字符 ‘.’匹配的表达式,不符合题意。改为 [w][w][w].[Alibaba\\-inc]+

.[com]+就对了,同时,对于-要用转义符。所以,选项 D错误。

【真题 216】词法分析器用来识别()。

A.句子 B.句型 C.单词 D.生产式

答案:C。

词法分析器使用状态转换图来识别单词符号。所以,选项 C正确。

【真题 217】编译过程中,语法分析器的任务是()。

A.分析单词是怎样构成的 B.分析单词串是如何构成语言和说明的

C.分析语句和说明是如何构成程序的 D.分析程序的结构

答案:B。

编译器的工作可以划分为以下几个阶段:

1)词法分析:主要用来识别单词。

2)语法分析:在词法分析的基础上将单词序列组合成各类语法短语,得到语言结构并以树的形式表示。

3)语义分析:检查语法正确的句子语义是否正确。

4)中间代码生成(可选):生成一种既接近目标语言,又与具体机器无关的表示,便于优化与代码生成。

5)代码优化(可选):优化实际上是一个等价变换,变换前后的指令序列完成同样的功能,但在占用的空间上和程序执行的时间上都更省、更有效。

6)目标代码生成:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。

7)符号表管理:合理组织符号,便于各阶段查找、填写等。

8)出错处理:错误的种类-词法错误、语法错误、静态语义错误和动态语义错误等。

【真题 218】语法分析器可以用于()。

A.识别语法错误 B.识别语法和语义错误

C.识别语义错误 D.识别并修正语法,语义错误

① 0型文法(短语结构文法)。0型文法的能力相当于图灵机( Turing)。任何 0型语言都是递归可枚举的;反之,递归可枚举集必定是一个 0型语言。

② 1型文法(上下文相关文法)。αAβ->αBβ一样的形式。这里的 A是非终结符号,而 α、β和 B是包含非终结符号与终结符号的字串,即: A只有出现在 α1α2的上下文中,才允许用 B替换。

③ 2型文法(上下文无关文法)。文法的产生式为: A->α,其中, A是非终结符号, α是包含非终结符号与终结符号的字串。

④ 3型文法(正规文法)。这种文法要求产生式的左侧只能包含一个非终结符号,产生式的右侧只能是空串、一个终结符号或者一个非终结符号后随一个终结符号;如果所有产生式的右侧都不含初始符号 S ,规则 S->ε也允许出现。这种文法规定的语言可以被有限状态自动机接受,也可以通过正则表达式来获得。正规语言通常用来定义检索模式或者程序设计语言中的词法结构。

答案:A。

【真题 219】正则表达式 A*B可以匹配的字符串是( )。

A.A  B.ACB  C.AB  D.AAB

答案:C、D。

【真题 220】下推自动识别机的语言是( )。

A.0型语言  B.1型语言  C.2型语言  D.3型语言

答案:C。

计算机中一共定义了四种文法,分别如下:

在四种文法的基础上定义了四种语言:

① 0型文法产生的语言称为 0型语言。

② 1型文法产生的语言称为 1型语言,也称作上下文有关语言。

③ 2型文法产生的语言称为 2型语言,也称作上下文无关语言。

④ 3型文法产生的语言称为 3型语言,也称作正规语言。

下表给出四种文法的特点以及对应的语言:

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Visual C++编程从基础到实践

Visual C++ 6.0是Microsoft公司的Visual Studio开发组件中最强大的编程工具,利用它可以开发出高性能的应用程序。本书由浅入深,从基础到实...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊