Organization of Programming Languages - Exam 1

Réussis tes devoirs et examens dès maintenant avec Quizwiz!

What are the two distinct goals of syntax analysis?

"First, the syntax analyzer must check the input program to determine whether it is syntactically correct. When an error is found, the analyzer must produce a diagnostic message and recover. In this case, recovery means it must get back to a normal state and continue its analysis of the input program. This step is required so that the compiler finds as many errors as possible during a single analysis of the input program. If it is not done well, error recovery may create more errors, or at least more error messages. "The second goal of syntax analysis is to produce a complete parse tree, or at least trace the structure of the complete parse tree, for syntactically correct input. The parse tree (or its trace) is used as the basis for translation."

A ________________ is a program that processes a program immediately before the program is compiled.

Preprocessor

Give three advantages of LR parsers.

1) They can be built for all programming languages. 2) They can detect syntax errors as soon as it is possible in a left-to-right scan. 3) The LR class of grammars is a proper superset of the class parsable by LL parsers (for example, many left recursive grammars are LR, but none are LL).

Using the grammar in Example 3.4 [p.120]*, show a sentential form leftmost derivation: A = B + C + A

<assign> => <id> = <expr> => A = <expr> => A = <expr> + <term> => A = <expr> + <term> + <term> => A = <term> + <term> + <term> => A = <factor> + <term> + <term> => A = <id> + <term> + <term> => A = B + <term> + <term> => A = B + <factor> + <term> => A = B + <id> + <term> => A = B + C + <term> => A = B + C + <factor> => A = B + C + <id> => A = B + C + A

In what language is most of UNIX written?

C

The first successful high-level language for business was ________________.

COBOL

What are the three general methods of implementing a programming language?

Compilation, Pure interpretation, Hybrid implementation

The process of placing a memory cell that has been unbound from a variable back into the pool of available memory.

Deallocation

PHP's array data structure is a combination of what two data structures from other languages?

Perl hashes, Javascript arrays

Select all that are examples of dynamic type binding. a. Perl: $x = 4; b. Java: int x = (int)4.0; c. Python: x = int(4.0) d. C++: int x = 4;

Perl: $x = 4; Python: x = int(4.0)

Which one of the following features was NOT a feature of Fortran 77?

Dynamic arrays

Perform the pairwise disjointness test for each of the following grammar rules. Your answer should show the FIRST() function for each RHS, and then state whether the LHS rule passes or fails pairwise disjointness. A → b{aB} | a

FIRST(b{aB}) = {b} FIRST(a) = {a} FIRST(b{aB}) ∩ FIRST(a) = Ø {b} ∩ {a} = Ø Passes

The first successful high-level language for scientific applications was _____________.

Fortran

What is the name of the category of programming languages whose structure is dictated by the von Neumann computer architecture?

Imperative programming languages

Variables bound to heap storage only when they are assigned values.

Implicit heap-dynamic variables

What are the three general methods of implementing a programming language?

Interpreted, compiled, Hybrid (compiled-interpreted)

A word of a programming language that is special only in certain contexts.

Keywords

The time during which the variable is bound to a specific memory location.

Lifetime

On what branch of mathematics is denotational semantics based?

Recursive Function Theory

Convert the following EBNF rules to BNF: S → A{bA} A → a[b]A

S → A | AB B → bA | bAB A → aA | abA

Variables whose storage bindings are created when their declaration statements are elaborated, but whose types are statically bound.

Stack-dynamic variables

Variables that are bound to memory cells before program execution begins and remain bound to those same memory cells until program execution terminates.

Static variables

What data structure(s) does Python use in place of arrays?

Tuples, dictionaries, lists

What is the primary use of attribute grammars?

Type Compatibility

An abstraction of a computer memory cell or collection of cells.

Variable

Consider the following grammar: <S> → <A> a <B> b <A> → <A> b | b <B> → a <B> | a Which of the following sentences are in the language generated by this grammar? a) bbaab b) bbbab c) baab d) bbaaaaa

bbaab baab

Initial implementations of Java were all hybrid. Its intermediate form, called ______________, provides portability to any machine that has an interpreter and an associated runtime system.

byte code

Consider the following grammar: S → aScB | A | b A → cA | c B → d | A Which of the following sentences are in the language generated/recognized by this grammar? a) cd b) acccbd c) acd d) acccbcc e) abcd f) accc

cd abcd accc

The binding of more than one variable to the same memory cell.

Aliasing

With respect to language evaluation critieria, select all language characteristics that affect reliability: a. Syntax design b. Orthogonality c. Type checking d. Support for abstraction e. Restricted aliasing f. Simplicity g. Data types h. Exception handling i. Expressivity

All answers are correct

The process of taking a memory cell from a pool of available memory and binding it to a variable.

Allocation

One of the greatest single advances in computing came with the introduction of the IBM [a] in 1954, in large measure because its capabilities prompted the development of [b].

a) 704 b) fortran

Using the algorithm described in Section 4.4.2, remove direct left recursion form the following grammar rules. A → Aa | Abc | bc | d

A → bcA' | dA' A' → aA' | bcA' | ε

At which possible binding time is a C or C++ static variable bound to a memory location?

Load time

On what branch of mathematics is axiomatic semantics based?

Logic

What characteristic does Ruby share with Smalltalk?

Pure-object oriented language

Using the algorithm described in Section 4.4.2, remove direct left recursion form the following grammar rules. X → Xyy | Xz | Yx | w Y → Yy | Yw | zy | x

X → YxX' | wX' X' → yyX' | zX' | ε Y -> zyY' | xY' Y' → yY' | wY' | ε

Using the grammar in Example 3.4 [p.120]*, show a sentential form leftmost derivation: A = ( A + B ) * C

<assign> => <id> = <expr> => A = <expr> => A = <term> => A = <term> * <factor> => A = <factor> * <factor> => A = (<expr>) * <factor> => A = (<expr> + <term>) * <factor> => A = (<term> + <term>) * <factor> => A = (<factor> + <term>) * <factor> => A = (<id> + <term>) * <factor> => A = (A + <term>) * <factor> => A = (A + <factor>) * <factor> => A = (A + <id>) * <factor> => A = (A + B) * <factor> => A = (A + B) * <id> => A = (A + B) * C

Using the grammar in Example 3.4 [p.120]*, show a sentential form leftmost derivation: A = A * (B + C)

<assign> => <id> = <expr> => A = <expr> => A = <term> => A = <term> * <factor> => A = <factor> * <factor> => A = <id> * <factor> => A = A * <factor> => A = A * (<expr>) => A = A * (<expr> + <term>) => A = A * (<term> + <term>) => A = A * (<factor> + <term>) => A = A * (<id> + <term>) => A = A * (B + <term>) => A = A * (B + <factor>) => A = A * (B + <id>) => A = A * (B + C)

Using the grammar in Example 3.4 [p.120]*, show a sentential form leftmost derivation: A = B * (C * (A + B))

<assign> => <id> = <expr> => A = <expr> => A = <term> => A = <term> * <factor> => A = <factor> * <factor> => A = <id> * <factor> => A = B * <factor> => A = B * (<expr>) => A = B * (<term>) => A = B * (<term> * <factor>) => A = B * (<factor> * <factor>) => A = B * (<id> * <factor>) => A = B * (C * <factor>) => A = B * (C * (<expr>)) => A = B * (C * (<expr> + <term>) => A = B * (C * (<term> + <term>)) => A = B * (C * (<factor> + <term>)) => A = B * (C * (<id> + <term>)) => A = B * (C * (A + <term>)) => A = B * (C * (A + <factor>)) => A = B * (C * (A + <id>)) => A = B * (C * (A + B))

Using the grammar in Example 3.2 [p.117]*, show a sentential form leftmost derivation for each of the three following statements: A = A * (B + (C))

<assign> => <id> = <expr> Right side: A = <expr> A = <id> * <expr> A = A * <expr> A = A * (<expr>) A = A * (<id> + <expr>) A = A * (B + <expr>) A = A * (B + (<expr>)) A = A * (B + (<id>)) A = A * (B + (C))

Using the grammar in Example 3.2 [p.117]*, show a sentential form leftmost derivation for each of the three following statements: A = A * (B + (C * A))

<assign> => <id> = <expr> Right side: A = <expr> A = <id> * <expr> A = A * <expr> A = A * (<expr>) A = A * (<id> + <expr>) A = A * (B + <expr>) A = A * (B + (<expr>)) A = A * (B + (<id> * <expr>)) A = A * (B + (C * <expr>)) A = A * (B + (C * <id>)) A = A * (B + (C * A))

Using the grammar in Example 3.2 [p.117]*, show a sentential form leftmost derivation for each of the three following statements: B = C * (A * C + B)

<assign> => <id> = <expr> Right side: B = <expr> B = <id> * <expr> B = C * <expr> B = C * (<expr>) B = C * (<id> * <expr>) B = C * (A * <expr>) B = C * (A * <id> + <expr>) B = C * (A * C + <expr>) B = C * (A * C + <id>) B = C * (A * C + B)

Write EBNF descriptions (i.e. rules) for the a Java class definition header statement. Begin with the start symbol <class_header>. Use the non-terminal <class_name> for the user-defined name of the class You do not have to include a LHS rule which defines valid naming conventions to expand the <class_name> non-terminal

<class_head> → {<modifier>} class <class_name> [extends class_name] [implements <interface_name> {, <interface_name>}] <modifier> → public | abstract | final

Describe, in English, the language defined by the following grammar: S → ABC A → aA | a B → bB | b C → cC | c

All strings that contain one or more a's followed by one or more b's followed by one or more c's. The following strings are all in the language: abc abbbbbbbbbbc aaaaaaaaaabbcc aabcc

Why are named constants used, rather than numbers, for token codes?

Although tokens are usually represented as integer values, for the sake of readability of lexical and syntax analyzers, they are often referenced through named constants.

With respect to language evaluation criteria, select all language characteristics that affect readability: a. Restricted aliasing b. Data types c. Type checking d. Exception handling e. Orthogonality f. Syntax design g. Expressivity h. Support for abstraction i. Simplicity

Data types, Orthogonality, Syntax Design, Simplicity

Variables that are nameless (abstract) memory cells allocated and deallocated by explicit run-time instructions written by the programmer.

Explicit heap-dynamic variables

With respect to language evaluation criteria, select all language characteristics that affect writability: a. Expressivity b. Exception handling c. Orthogonality d. Restricted aliasing e. Type checking f. Simplicity g. Syntax design h. Support for abstraction i. Data types

Expressivity, Orthogonality, Simplicity, Syntax design, Support for abstraction, Data types

Perform the pairwise disjointness test for each of the following grammar rules. Your answer should show the FIRST() function for each RHS, and then state whether the LHS rule passes or fails pairwise disjointness. B → aB | a

FIRST(aB) = {a} FIRST(a) = {a} FIRST(aB) ∩ FIRST(a) = {a} {a} ∩ {a} = {a} Fails

Perform the pairwise disjointness test for each of the following grammar rules. Your answer should show the FIRST() function for each RHS, and then state whether the LHS rule passes or fails pairwise disjointness by examining all pairs of RHS FIRST()'s. To get you started, the first RHS is: FIRST(aB) = {a} A → aB | b | cBB

FIRST(aB) = {a} FIRST(b) = {b} FIRST(cBB) = {c} FIRST(aB) ∩ FIRST(b) ∩ FIRST(cBB) = Ø {a} ∩ {b} ∩ {c} = Ø Passes

Perform the pairwise disjointness test for each of the following grammar rules. Your answer should show the FIRST() function for each RHS, and then state whether the LHS rule passes or fails pairwise disjointness by examining all pairs of RHS FIRST()'s. To get you started, the first RHS is: FIRST(aB) = {a} B → aB | bA | aBb

FIRST(aB) = {a} FIRST(bA) = {b} FIRST(aBb) = {a} FIRST(aB) ∩ FIRST(bA) ∩ FIRST(aBb) = {a} {a} ∩ {b} ∩ {a} = {a} Fails

Perform the pairwise disjointness test for each of the following grammar rules. Your answer should show the FIRST() function for each RHS, and then state whether the LHS rule passes or fails pairwise disjointness. S → aSb | bAA

FIRST(aSb) = {a} FIRST(bAA) = {b} FIRST(aSb) ∩ FIRST(bAA) = Ø {a} ∩ {b} = Ø Passes

Perform the pairwise disjointness test for each of the following grammar rules. Your answer should show the FIRST() function for each RHS, and then state whether the LHS rule passes or fails pairwise disjointness by examining all pairs of RHS FIRST()'s. To get you started, the first RHS is: FIRST(aB) = {a} C → aaA | b | caB

FIRST(aaA) = {a} FIRST(b) = {b} FIRST(caB) = {c} FIRST(aaA) ∩ FIRST(b) ∩ FIRST(caB) = Ø {a} ∩ {b} ∩ {c} = Ø Passes

True or false: In programming languages, the use of keywords is more restrictive than reserved words.

False

True or false: Like the if/else statement in Java and C++, the Racket else statement is optional.

False

True or false: Python data types are declared explicitly.

False

Between 1951 and 1953, a team led by _________________ at UNIVAC developed a series of "compiling" systems named A-0, A-1, and A-2 that expanded a pseudo-code into machine code subprograms in the same way as macros are expanded into assembly language.

Grace Hopper

At which possible binding time is the Java + operator symbol bound to a memory location?

Language design time

Select all that are constructed languages: a. Na'vi b. lojban c. Esperanto d. Klingon e. Mandarin f. Loglan g. English h. Latin

Na'vi, Lojban, Esperanto, Klingon, Loglan

A string of characters used to identify some entity in a program.

Name

Variables can be characterized as a sextuple (6-tuple) of which six attributes?

Name Address Value Type Lifetime Scope

A simple trade-off can be made between compilation cost and execution speed of the compiled code. _______________ is the name given to the collection of techniques that compilers may use to decrease the size and/or increase the execution speed of the code they produce.

Optimization

With respect to compilation, the syntax analyzer takes the lexical units from the lexical analyzer and uses them to construct hierarchical structures called _____________.

Parse trees

A special word of a programming language that can- not be used as a name.

Reserved word

What are three reasons why lexical analysis is separated from syntax analysis?

Simplicity, Efficiency, Portability

What language was the first to fully support object-oriented programming?

Smalltalk

For what application area is JavaScript most widely used?

Web programming

The very first program was written in 1843 by [a], which was designed to execute on the theoretical hardware platform called the Analytical Engine, designed in 1842 by [b].

a) Ada Lovelace b) Charles Babbage

What two programming language deficiencies were discovered as a result of the research in software development in the 1970s?

a) Incompleteness of type checking b) Inadequacy of control statements

Although never implemented, and not even published until 1972, the first high-level language, [a], was developed in Germany between 1936 and 1945 by [b].

a) Plankalkül b) Zuse

Compute the weakest precondition for each of the following assignment statements and postconditions: a) a = 2 * (b - 1) - 1 {a > 0} b) b = (c + 10) / 3 {b > 6} c) a = a + 2 * b - 1 {a > 1} d) x = 2 * y + x - 1 {x > 11}

a) b > 3/2 b) c > 8 c) b > 1 - a/2 d) y > 6 - x/2

The first widely-used functional programming language (called [a]) was invented to provide language features for list processing, the need for which grew out of the first applications in the area of [b].

a) lisp b) artificial intelligence

Compute the weakest precondition: a = 2 * b + 1; b = a - 3 {b < 0}

b < 1

Computer the weakest precondition: a = 3 * (2 * b + a); b = 2 * a - 1 {b > 5}

b > (1-a)/2 OR b > 1/2-a/2

The execution of a machine code program on a von Neumann architecture computer occurs in a process called the _________________ cycle.

fetch-execute

The primary limiting factor in the speed of von Neumann architecture computers is called the ________________.

von Neumann bottleneck


Ensembles d'études connexes

Principles of Financial Management Chapter 2

View Set

Unit 2 Exam: How does inheritance work?

View Set