CSCI 431 Homework 9

time due submission file
9:00 AM Wednesday 15 November, 2006 csci/431/HW9/tingle.atg

The assignment

In this assignment you are going to augment your solution to Homework 5;. Your attribute grammer should first process a series of "assignments" of the form:


-bulldog=50
+bulldog=25
-busbee=1000000

These should then be followed by a blank line (to avoid some LL(1) nastiness) and then by a series of Homework 5 style tests.


+busbee[> 30] & ~ ( -bulldog[< 20] | +candler [ > 15] )
+bulldog[< 20] | -busbee[< 20]

Your program should then evaluate the expressions and simply print either true or false for each.

For simplicity, you may (1) ignore all "assignments" regarding a computer except for the last one and (2) assume that any primitive test involving a computer that isn't mentioned is true. In the example above this means that bulldog has been up for 25 seconds, rather than down for 50 seconds; and that +candler[>15] is true.

Homework 5 solution

To give everyone a working starting point, I'm attaching a copy of my Homework 5 solution.


// Homework 5 solution
//   J. Dean Brock

COMPILER tingle

CHARACTERS
  letter     = 'A'..'Z' + 'a'..'z' .
  digit      = '0'..'9' .

TOKENS
  hostname   = letter { letter } .
  number     = digit { digit } .
  compare    = '<' | '>' .
  updown     = '+' | '-' .

IGNORE '\t' + '\r' + ' '

PRODUCTIONS
  TingleExpr =
        TingleTerm
	{ 
	  '|'                  (. System.out.print("| ") ; .)
	  TingleTerm
	}
	.

  TingleTerm =
	TingleFactor
	{ 
          "&"                  (. System.out.print("& ") ; .)
	  TingleFactor
	}
	.

  TingleFactor = 
        (
	  TingleTest
	| 
	  '~'                  (. System.out.print("~ ") ; .)
	  TingleFactor
	| 
	  '('                  (. System.out.print("( ") ; .)
	  TingleExpr
	  ')'                  (. System.out.print(") ") ; .)
        )
	.

  TingleTest =
        updown
        hostname
        "["
        compare
        number
        "]"
        .

  tingle  =
        {
          TingleExpr
          '\n'                  (. System.out.println() ; .)
        }
        .

END tingle .