编译原理龙书课后部分答案(英文版)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1) What is the difference between a compiler and an interpreter?

A compiler is a program that can read a program in one language - the source language - and translate it into an equivalent program in another language – the target language and report any errors in the source program that it detects during the translation process.

Interpreter directly executes the operations specified in the source program on inputs supplied by the user.

2) What are the advantages of:

(a) a compiler over an interpreter

a. The machine-language target program produced by a compiler is usually much faster than an interpreter at mapping inputs to outputs.

(b) an interpreter over a compiler?

b. An interpreter can usually give better error diagnostics than a compiler, because it executes the source program statement by statement.

3) What advantages are there to a language-processing system in which the compiler produces assembly language rather than machine language?

The compiler may produce an assembly-language program as its output, because assembly language is easier to produce as output and is easier to debug.

4.2.3 Design grammars for the following languages:

a) The set of all strings of 0s and 1s such that every 0 is immediately followed by at least 1.

S -> SS | 1 | 01 |

4.3.1 The following is a grammar for the regular expressions over symbols a and

b only, using + in place of | for unions, to avoid conflict with the use of vertical bar as meta-symbol in grammars:

rexpr -> rexpr + rterm | rterm

rterm -> rterm rfactor | rfactor

rfactor -> rfactor * | rprimary

rprimary -> a | b

a) Left factor this grammar.

rexpr -> rexpr + rterm | rterm

rterm -> rterm rfactor | rfactor

rfactor -> rfactor * | rprimary

rprimary -> a | b

b) Does left factoring make the grammar suitable for top-down parsing?

No, left recursion is still in the grammar.

c) In addition to left factoring, eliminate left recursion from the original grammar.

rexpr -> rterm rexpr’

rexpr’ -> + rterm rexpr | ε

rterm -> rfactor rterm’

rterm’ -> rfactor rterm | ε

rfactor -> rprimary rfactor’

rfactor’ -> * rfactor’ | ε

rprimary -> a | b

d) Is the resulting grammar suitable for top-down parsing?

Yes.

Exercise 4.4.1 For each of the following grammars, derive predictive parsers and show the parsing tables. You may left-factor and/or eliminate left-recursion from your grammars first. A predictive parser may be derived by recursive decent or by the table driven approach. Either way you must also show the predictive parse table.

a) The grammar of exercise 4.2.2(a).

4.2.2 a) S -> 0S1 | 01

This grammar has no left recursion. It could possibly benefit from left factoring. Here is the recursive decent PP code.

s() {

match(‘0’);

if (lookahead == ‘0’)

s();

match(‘1’);

}

Or

Left factoring the grammar first:

S -> 0S’

S’ -> S1 | 1

相关文档
最新文档