Docsity
Docsity

Prepare for your exams
Prepare for your exams

Study with the several resources on Docsity


Earn points to download
Earn points to download

Earn points by helping other students or get them with a premium plan


Guidelines and tips
Guidelines and tips

Programming Languages - Study Guide for Assignment 2 - Fall 2007 | CS 401, Assignments of Programming Languages

Material Type: Assignment; Class: Programming Languages; Subject: Computer Science; University: University of Alabama - Birmingham; Term: Spring 2007;

Typology: Assignments

2009/2010

Uploaded on 04/12/2010

koofers-user-7ag-1
koofers-user-7ag-1 🇺🇸

5

(1)

10 documents

1 / 2

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
CS 405/505 ASSIGNMENT #2
Due Wednesday, January 31, 2007
Consider the following extended BNF grammar for a subset of the Perl programming language,
called MicroPerl.
program ::= use strict ;
require “list.pl” ;
{sub-definition }
{ { declaration ;}{statement } }
sub-definition ::= sub sub-identifier {
my variable-identifier = @ ;
{declaration ;}{statement }
return ( expression ) ;
}
declaration ::= my variable-identifier
statement ::= variable-identifier = expression ;
|if ( expression )statement-block [else statement-block ]
|while ( expression )statement-block
|print variable-identifier ;
statement-block ::= {statement {statement } }
expression ::= term |expression binary-op expression
term ::= primary-expression |unary-op term
primary-expression ::= variable-identifier |integer |list-expression
|sub-identifier list-expression
|hd list-expression
|tl list-expression
|isNil list-expression
list-expression ::= ([ expression {,expression }])
Syntactic and Semantic Conventions The keywords and the token symbols in MicroPerl
are in bold. Note that MicroPerl has symbols {and }, which are distinguished from grammar
metasymbols {and }, respectively, by underlining. The unary operators are +, and ! (negation)
Binary operators obey the customary precedence rules, from highest to lowest:
multiplicative , /
binary additive +,
relational ==, ! =, <,>,<=, >=
boolean &&, k
A MicroPerl sub identifier is a bare name, which consists of letters (only alphabetic characters),
digits, and underscores ( ) with the restrictions that it must begin with a letter, cannot end with
an underscore and cannot have two consecutive underscores. For example, give 2 Joe, tell me and
A45Asm3 are valid bare names, but 6gh, two bad, and no end are not. A MicroPerl variable may
be a scalar variable or a list variable. A scalar variable identifier begins with a $, followed by a bare
name. A list variable identifier begins with a @, followed by a bare name. integer is an unsigned
integer. MicroPerl comments are indicated by being preceded by # and terminated by the end of
the line.
pf2

Partial preview of the text

Download Programming Languages - Study Guide for Assignment 2 - Fall 2007 | CS 401 and more Assignments Programming Languages in PDF only on Docsity!

CS 405/505 ASSIGNMENT

Due Wednesday, January 31, 2007

Consider the following extended BNF grammar for a subset of the Perl programming language, called MicroPerl.

program ::= use strict ; require “list.pl” ; { sub-definition } { { declaration ; } { statement } } sub-definition ::= sub sub-identifier { my variable-identifier = @ ; { declaration ; } { statement } return ( expression ) ; } declaration ::= my variable-identifier statement ::= variable-identifier = expression ; | if ( expression ) statement-block [else statement-block ] | while ( expression ) statement-block | print variable-identifier ; statement-block ::= { statement { statement } } expression ::= term | expression binary-op expression term ::= primary-expression | unary-op term primary-expression ::= variable-identifier | integer | list-expression | sub-identifier list-expression | hd list-expression | tl list-expression | isNil list-expression list-expression ::= ( [ expression {, expression } ] )

Syntactic and Semantic Conventions The keywords and the token symbols in MicroPerl are in bold. Note that MicroPerl has symbols { and }, which are distinguished from grammar metasymbols { and }, respectively, by underlining. The unary operators are +, − and! (negation) Binary operators obey the customary precedence rules, from highest to lowest:

multiplicative ∗, / binary additive +, − relational ==,! =, <, >, <=, >= boolean &&, ‖

A MicroPerl sub identifier is a bare name, which consists of letters (only alphabetic characters), digits, and underscores ( ) with the restrictions that it must begin with a letter, cannot end with an underscore and cannot have two consecutive underscores. For example, give 2 Joe, tell me and A45Asm3 are valid bare names, but 6gh, two bad, and no end are not. A MicroPerl variable may be a scalar variable or a list variable. A scalar variable identifier begins with a $, followed by a bare name. A list variable identifier begins with a @, followed by a bare name. integer is an unsigned integer. MicroPerl comments are indicated by being preceded by # and terminated by the end of the line.

  1. Determine the set of tokens which a lexical analyzer would need to recognize.
  2. Design and implement a lexical analyzer procedure to read a source program in the above language and print the next token in the input stream. If the token detected is a valueless token, such as a keyword, then it is sufficient to print only the keyword. If it has a value, then both the token type and lexeme should be printed.
  3. You will be given several MicroPerl programs with which to test your lexical analyzer. These will be located on the class WWW page and will be of the form test1.pl, test2.pl, etc.

Suggestions:

  1. Construct a token class to represent the token data structure, including a method to print a token.
  2. Use the JLex tool to automatically construct a lexical analyzer in Java from a set of regular expressions specifying tokens. This can interface with your token class to return a token to the main program which then prints the token.