EAL V2.0 by Douglas W. Jones; Wed Jun 30 15:01:11 2004 1 |; test2.a 2 |; test EAL version MP2 3 | 4 |; Date: June 29, 2004 5 |; Author: Douglas Jones 6 | 7 |; demo of types of largely lifted from HW3 8 | 9 |IDENT = 1 ; an identifier for demo purposes 10 | 11 |; forms of terms, note that ::= 12 |; and that ::= 13 0000: 0001 | W IDENT ; ::= 14 0002: 0063 | W 99 ; ::= 15 0004: 0004 | W . ; ::= . 16 | 17 |; forms of subexpressions, note that ::= IDENT 18 0006: 0001 | W IDENT ; ::= 19 0008: 0002 | W IDENT + IDENT ; ::= { + } 20 000A: 0003 | W IDENT + IDENT + IDENT 21 000C: 0004 | W IDENT + IDENT + IDENT + IDENT 22 | 23 |; permissible operators in subexpressions 24 000E: 0002 | W IDENT + IDENT ; ::= { (+|-|&||) } 25 0010: 0000 | W IDENT - IDENT 26 0012: 0001 | W 99 & IDENT ; note, 99 and 1 is 1 27 0014: 0063 | W 99 | IDENT ; note, 99 or 1 is 99 28 | 29 |; parentheses (not in the BNF, but in parse_operand)! 30 0016: 0001 | W (IDENT) 31 0018: 0002 | W IDENT + (IDENT) 32 001A: 0002 | W (IDENT) + IDENT 33 001C: 0002 | W (IDENT + IDENT) 34 | 35 |; some illustrations of operator precidence and parens 36 001E: 0005 | W 1 + 2 - 3 & 4 | 5 ; = 5 37 0020: 0005 | W (((1 + 2)- 3)& 4)| 5 ; = 5 38 0022: 0002 | W 1 +(2 -(3 &(4 | 5))) ; = 2 39 0024: 0002 | W (1 + 2)-(3 &(4 | 5)) ; = 2 40 0026: 0000 | W ((1 + 2)- 3)&(4 | 5) ; = 0 41 | 42 |; test ::= [ = ] 43 0028: FFFF | W IDENT = IDENT ; true = FFFF 44 002A: 0000 | W IDENT = (IDENT+1) ; false = 0000 45 002C: 0000 | W (IDENT+1) = IDENT ; false = 0000 46 002E: FFFF | W (IDENT+1) = (IDENT+1) ; true = FFFF 47 | 48 |; test operator precidence for subexpressions 49 0030: 0000 | W IDENT = IDENT+1 ; false = 0000 50 0032: 0000 | W IDENT+1 = IDENT ; false = 0000 51 0034: FFFF | W IDENT+1 = IDENT+1 ; true = FFFF 52 0036: 0001 | W (IDENT+1 = IDENT)+1 ; gives 1 (not Boolean) 53 0038: 0001 | W IDENT+(1 = IDENT)+1 ; gives 1 (not Boolean) 54 | 55 |; demonstrate precidence with other operators 56 003A: FFFF | W IDENT&3 = IDENT&5 ; true = FFFF 57 003C: 0000 | W IDENT&4 = IDENT&5 ; false = 0000 58 003E: FFFF | W IDENT|4 = IDENT|5 ; true = FFFF 59 0040: 0000 | W IDENT|3 = IDENT|5 ; false = 0000 60 | 61 |; contexts for operands 62 0042: 02 | B IDENT + 1 63 0043: 0003 | W IDENT + 2 64 |IDENT = IDENT + 3 65 | 66 |; errors involving undefined operands 67 0045: ?? | B UNDEFINED ^ undefined 68 0046: ?? | B UNDEFINED + IDENT ^ undefined 69 0047: ?? | B IDENT + UNDEFINED ^ undefined 70 0048: ?? | B UNDEFINED = IDENT ^ undefined 71 0049: ?? | B IDENT = UNDEFINED ^ undefined 72 | 73 |; error involving syntax 74 004A: ?? | B ( ^ operand expected 75 004B: 04 | B (IDENT ^ end paren expected 76 004C: ?? | B IDENT + ^ operand expected 77 004D: ?? | B (IDENT + ^ operand expected 78 004E: ?? | B IDENT = ^ operand expected 79 004F: ?? | B (IDENT = ^ operand expected 80 0050: 04 | B IDENT) ^ comment expected 81 0051: ?? | B ) ^ operand expected 82 0052: ?? | B ) ^ operand expected 83 |