1) Write a regular expression to capture Java’s long literals in base 16 and then construct a finite-state automation for it.
2) Consider the following grammar:
<E> ::= a <B> | b <A> | ε
<A> ::= a <E> | b <A> <A>
<B> ::= b <E> | a <B> <B>
- Write a leftmost derivation for the string a b a a b b.
- Show the parse tree for the string a b a a b b.
- Describe in English the language that the grammar generates.
3) Consider the following grammar for expressions:
<expr> ::= <expr> + <term> | <term>
<term> ::= <expr> * <factor> | <factor>
<factor> ::= id
1.Show that the grammar is ambiguous.
2.Provide an alternate unambiguous grammar that defines the same set of expressions.
4) Consider the grammar
S -> ( L ) | a
L -> L, S | S
- Re-write the grammar in the EBNF notation.
- Write a recursive-descent parser based on the EBNF notation.
(a) A number consists of digits from 0 to 9. For example, 1234 is a number. Give two different grammars to define a number, one using a left-recursive rule and the other using a right-recursive rule.
(b) A decimal number can be defined as a number followed by a decimal point (.) and another number. For example, 123.045 is a decimal number. Define attributes and write an attribute grammar to compute the value of any decimal number.