[Solved] CS39003 Assignment4

$25

File Name: CS39003_Assignment4.zip
File Size: 178.98 KB

SKU: [Solved] CS39003 Assignment4 Category: Tag:
5/5 - (1 vote)

1 Preamble tinyC

This assignment follows the phase structure grammar specification of C language from the International 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.

The lexical specification of tinyC, also taken and abridged from the Standard, has already been discussed in Assignment 3. The phase structure grammar specification is written using the common notation of language specifications as discussed in the last assignment.

2 Phrase Structure Grammar of tinyC

  1. Expressions

primary-expression: identifier constant string-literal

( expression ) postfix-expression:

primary-expression postfix-expression [ expression ] postfix-expression ( argument-expression-listopt ) postfix-expression . identifier postfix-expression > identifier postfix-expression ++ postfix-expression ( type-name ) { initializer-list }

( type-name ) { initializer-list , } argument-expression-list:

assignment-expression

argument-expression-list , assignment-expression

unary-expression:

postfix-expression ++ unary-expression unary-expression unary-operator cast-expression sizeof unary-expression sizeof ( type-name )

unary-operator: one of

& * + ~ !

cast-expression:

unary-expression

( type-name ) cast-expression multiplicative-expression:

cast-expression multiplicative-expression cast-expression multiplicative-expression / cast-expression multiplicative-expression % cast-expression additive-expression:

multiplicative-expression additive-expression + multiplicative-expression additive-expression multiplicative-expression

shift-expression:

additive-expression shift-expression << additive-expression shift-expression >> additive-expression

relational-expression:

shift-expression relational-expression < shift-expression relational-expression > shift-expression relational-expression <= shift-expression relational-expression >= shift-expression

equality-expression:

relational-expression equality-expression == relational-expression equality-expression ! = relational-expression AND-expression:

equality-expression

AND-expression & equality-expression exclusive-OR-expression: AND-expression exclusive-OR-expressionAND-expression

inclusive-OR-expression:

exclusive-OR-expression inclusive-OR-expression | exclusive-OR-expression

logical-AND-expression:

inclusive-OR-expression logical-AND-expression && inclusive-OR-expression

logical-OR-expression:

logical-AND-expression logical-OR-expression || logical-AND-expression

conditional-expression:

logical-OR-expression logical-OR-expression ? expression : conditional-expression

assignment-expression:

conditional-expression unary-expression assignment-operator assignment-expression

assignment-operator: one of

= *= /= %= += -= <<= >>= &= ^= |=

expression:

assignment-expression expression , assignment-expression

constant-expression: conditional-expression

  1. Declarations declaration:

declaration-specifiers init-declarator-listopt ;

declaration-specifiers:

storage-class-specifier declaration-specifiersopt type-specifier declaration-specifiersopt type-qualifier declaration-specifiersopt function-specifier declaration-specifiersopt

init-declarator-list:

init-declarator init-declarator-list , init-declarator

init-declarator:

declarator declarator = initializer storage-class-specifier: extern static

type-specifier: void char short int long float double specifier-qualifier-list:

type-specifier specifier-qualifier-listopt type-qualifier specifier-qualifier-listopt

enumerator-list:

type-qualifier: const restrict volatile

function-specifier: inline

declarator: pointeropt direct-declarator

direct-declarator: identifier

( declarator ) direct-declarator [ type-qualifier-listopt assignment-expressionopt ] direct-declarator

[ static type-qualifier-listopt assignment-expression ] direct-declarator [ type-qualifier-list static assignment-expression ] direct-declarator [ type-qualifier-listopt * ] direct-declarator ( parameter-type-list ) direct-declarator ( identifier-listopt )

pointer:

  • type-qualifier-listopt
  • type-qualifier-listopt pointer type-qualifier-list:

type-qualifier type-qualifier-list type-qualifier

parameter-type-list: parameter-list parameter-list , parameter-list:

parameter-declaration parameter-list , parameter-declaration parameter-declaration: declaration-specifiers declarator declaration-specifiers

identifier-list:

identifier identifier-list , identifier

type-name:

specifier-qualifier-list

initializer:

assignment-expression { initializer-list }

{ initializer-list , } initializer-list:

designationopt initializer initializer-list , designationopt initializer

designation: designator-list =

designator-list:

designator designator-list designator

designator:

[ constant-expression ]

. identifier

  1. Statements statement:

labeled-statement compound-statement expression-statement selection-statement iteration-statement jump-statement

labeled-statement:

identifier : statement case constant-expression : statement default : statement

compound-statement:

{ block-item-listopt } block-item-list:

block-item block-item-list block-item

block-item: declaration statement

expression-statement: expressionopt ;

selection-statement:

if ( expression ) statement if ( expression ) statement else statement switch ( expression ) statement iteration-statement:

while ( expression ) statement do statement while ( expression ) ; for ( expressionopt ; expressionopt ; expressionopt ) statement for ( declaration expressionopt ; expressionopt ) statement

jump-statement: goto identifier ; continue ; break ; return expressionopt ;

  1. External definitions translation-unit:

external-declaration translation-unit external-declaration

external-declaration: function-definition declaration

function-definition: declaration-specifiers declarator declaration-listopt compound-statement

declaration-list:

declaration declaration-list declaration

3 The Assignment

  1. Write a bison specification for defining the tokens of tinyC and generate the required y.tab.h file.
  2. Write a bison specification for the language of tinyC using the above phase structure grammar. Use the flex specification that you had developed for Assignment 3 (if required, you may fix your flex specification).
  3. While writing the bison specification, you may need to make some changes to the grammar. For example, some non-terminals like

argument-expression-listopt

are shown as optional on the right-hand-side as: postfix-expression:

postfix-expression ( argument-expression-listopt )

One way to handle them would be to introduce a new non-terminal, argument-expression-list-opt, and a pair of new productions:

argument-expression-list-opt:

argument-expression-list

and change the above rule as: postfix-expression:

postfix-expression ( argument-expression-list-opt )

  1. Names of your .l and .y files should be asgn4 roll.l and asgn4 roll.y respectively. The .y or the .l file should not contain the function main(). Write your main() (in a separate file asgn4 roll.c) to test your lexer and parser.
  2. Prepare a Makefile to compile the specifications and generate the lexer and the parser.
  3. Prepare a test input file asgn4 roll c that will test all the rules that you have coded.
  4. Prepare a tar-archive with the name asgn4 roll.tar containing all the files and upload to Moodle.

4 Credits

  1. Specifications and testing: 70
  2. Main file and makefile: 10
  3. Test file: 20

Reviews

There are no reviews yet.

Only logged in customers who have purchased this product may leave a review.

Shopping Cart
[Solved] CS39003 Assignment4[Solved] CS39003 Assignment4
$25