CS39003 Assignment 3-Lexer for tinyC Solved

30.00 $

Category:

Description

Rate this product

Assignment – 3: Lexer for tinyC

1 Preamble – tinyC

This assignment follows the lexical specification of C language from the Interna- tional Standard ISO/IEC 9899:1999 (E). To keep the assignment within our required scope, we have chosen a subset of the specification as given below. We shall refer to this language as tinyC and subsequently (in a later assignment) specify its grammar from the Phase Structure Grammar given in the C Standard.

The lexical specification quoted here is written using a precise yet compact notation typically used for writing language specifications. We first outline the notation and then present the Lexical Grammar that we shall work with.

2 Notation

In the syntax notation used here, syntactic categories (non-terminals) are in- dicated by italic type, and literal words and character set members (terminals) by bold type. A colon (:) following a non-terminal introduces its definition. Alternative definitions are listed on separate lines, except when prefaced by the words ”one of”. An optional symbol is indicated by the subscript ”opt”, so that the following indicates an optional expression enclosed in braces.

3

1.

2.

Lexical Elements

token:
keyword

identifier constant string-literal punctuator

Keywords

keyword: one of
auto enum

break extern case float char for const goto continue if default inline do int double long else register

Identifiers

identifier: identifier-nondigit

{ expressionopt }
Lexical Grammar of tinyC

3.

identifier identifier-nondigit identifier digit

restrict return short signed sizeof static struct switch typedef union

unsigned void volatile while

Bool Complex Imaginary

1

identifier-nondigit: one of abcdefghijklm nopqrstuvwxyz

ABCDEFGHIJKLM

NOPQRSTUVWXYZ

digit: one of 0123456789

4. Constants

constant: integer-constant

floating-constant enumeration-constant character-constant

integer-constant: nonzero-digit

integer-constant digit nonzero-digit: one of

123456789

floating-constant:
fractional-constant exponent-partopt digit-sequence exponent-part

fractional-constant:
digit-sequenceopt . digit-sequence digit-sequence .

exponent-part:
e signopt digit-sequence

E signopt digit-sequence sign: one of

+–

digit-sequence: digit

digit-sequence digit enumeration-constant:

identifier character-constant:

‘ c-char-sequence ‘ c-char-sequence:

c-char

c-char-sequence c-char c-char:

any member of the source character set except
the single-quote ‘, backslash \, or new-line character

escape-sequence escape-sequence: one of

\’ \” \? \\
\a \b \f \n \r \t \v

5. String literals

string-literal:
” s-char-sequenceopt ”

s-char-sequence: s-char

s-char-sequence s-char s-char:

any member of the source character set except
the double-quote ”, backslash \, or new-line character

escape-sequence

2

4

1.

2. 3. 4.

5.

6.

Punctuators

punctuator: one of

[ ] ( ) { } . ->
++ — & * + – ~ !
/ % << >> < > <= >= == != ^ | && || ? : ; …
= *= /= %= += -= <<= >>= &= ^= |=
,#

Comments

(a) Multi-line Comment
Except within a character constant, a string literal, or a comment, the characters /* introduce a comment. The contents of such a comment are examined only to identify multibyte characters and to find the characters */ that terminate it. Thus, /* … */ comments do not nest.

(b) Single-line Comment
Except within a character constant, a string literal, or a comment, the characters // introduce a comment that includes all multibyte characters up to, but not including, the next new-line character. The contents of such a comment are examined only to identify multibyte characters and to find the terminating new-line character.

The Assignment

Write a flex specification for the language of tinyC using the above lexical grammar. Name of your file should be ass3 roll.l. The ass3 roll.l should not contain the function main().

Write your main() (in a separate file ass3 roll.c) to test your lexer. Prepare a Makefile to compile the specifications and generate the lexer.

Prepare a test input file ass3 roll test.c that will test all the lexical rules that you have coded.

Prepare a tar-archive with the name ass3 roll.tar containing all the above files and upload to Moodle.

  • Assignment-3-oyotlp.zip