示例#1
0
def testTypeCheck():
    """ type expected"""
    error = compileString("""
program p;
  type a: 5;
  type b = c;
  type d = array 1..4 integer;

  var x: a;
  begin 
    x := 5
  end;
""",
                          os.devnull,
                          suppress_errors=True)

    error += compileString("""
program p;

  type d = array [1:4] of integer; {. expected}
  type e = array [1.4] integer; {. expected, of expected}
  type f = array [-1..-4] of integer; {bad upper, lower bound}
  type g = record h: integer {end expected}


  var x: integer;
  begin 
    x := 5
  end;
""",
                           os.devnull,
                           suppress_errors=True)
    return error
示例#2
0
def testConditionalStatementCheck():
    error = compileString("""
program p;
  var x, y: integer;
  var p, q: boolean;
  begin 
    if p {then expected}
      x := 5;
    
    while p  {do expected}
      x := 5; 
    
    while x then{bool expected}
      x := 1
  end
""",
                          os.devnull,
                          suppress_errors=True)
    error += compileString("""
    program p;
      var x, y: integer;
      begin 
        if x then{bool expected}
          x := 5
      end
    """,
                           os.devnull,
                           suppress_errors=True)
    return error
示例#3
0
def testProcCallCheck():
    error = compileString("""
program p;
  type aa = integer;
  var x, y: integer;
  procedure q(var a, b: integer);
    begin 
      a := 7
    end;
  procedure q2;
    var a: integer;
    begin 
      a := 7
    end;
  begin 
    x := 1;
    q(5, 5); {illegal param mode x2}
    q(x, x, x); {extra param}
    q(x); {too few param}
    q(x,x ;{) expected}
    q2(x) {extra param}
    aa {variable or procedure expected}
  end
""",
                          os.devnull,
                          suppress_errors=True)
    return error
示例#4
0
def testGetChar():
    error = compileString("""
program p;
var x: integer;
  begin 
  write(|)
  end;
""")
    return error
示例#5
0
def testCompoundStatementCheck():
    error = compileString("""
program p;
  var x: integer;
  {begin expected} 
    x := 1 
    x := 2
  {end expected}
""",
                          os.devnull,
                          suppress_errors=True)
    return error
示例#6
0
def testTermCheck():
    error = compileString("""
program p;
  type arrtype = array [1 .. 7] of integer;
  var z: arrtype;
  var x, y: integer;
  begin 
    x := 3 * z; {bad type}
  end;
""",
                          os.devnull,
                          suppress_errors=True)
    return error
示例#7
0
def testMaxValueCheck():
    """produces error 'value too large'"""
    error = compileString("""
program p;
  const c = 4294967296;
  var x: integer;
  begin 
    x := c
  end
""",
                          os.devnull,
                          suppress_errors=True)
    return error
示例#8
0
def testProgramDeclCheck():
    error = compileString("""
p;
  begin 
  end;
""",
                          os.devnull,
                          suppress_errors=True)
    error += compileString("""
program;
  begin 
  end;
""",
                           os.devnull,
                           suppress_errors=True)
    error += compileString("""
program p
  begin 
  end;
""",
                           os.devnull,
                           suppress_errors=True)
    return error
示例#9
0
def testTypedIdsCheck():

    error = compileString("""
program p;
  type s = record g, h = integer end; {: expected}
  var x: integer;
  begin 
    x := 5
  end;
""",
                          os.devnull,
                          suppress_errors=True)

    error += compileString("""
program p;
  type s = record g, 1 : integer end; {identifier expected}
  var x: integer;
  begin 
    x := 5
  end;
""",
                           os.devnull,
                           suppress_errors=True)
    return error
示例#10
0
def testAssignmentStatementCheck():
    error = compileString("""
program p;
  var x: integer;
  var y: boolean;
  begin 
    5; {statement expected, invalid statement}
    x := y; {incompatible assignment }
    y = x; {:= expected}
    y and y {:= expected}

  end;
""",
                          os.devnull,
                          suppress_errors=True)
    return error
示例#11
0
def testFactorCheck():
    error = compileString("""
program p;
  type arrtype = array [1 .. 7] of integer;
  var z: arrtype;
  var x, y: integer;
  begin 
    y := not x; {not boolean}
    y := (5 ; { ) expected}
    x := arrtype; {var or const expected}
    x := .^^ {factor expected x2}
  end;
""",
                          os.devnull,
                          suppress_errors=True)
    return error
示例#12
0
def testLevelCheck():
    """ level! error with nested procedures """
    error = compileString("""
program p;
  procedure q(a, b: integer);
    procedure r(c, d: integer);
      begin
        a := 4
      end;
    begin 
      a := 7
    end;
  begin q(5, 6)
  end
""",
                          os.devnull,
                          suppress_errors=True)
    return error
示例#13
0
def testBooleanParamMode():
    """ cant pass cond as value """
    error = compileString("""
program p;
  type a = array [1..10] of integer;
  var myarr: a;
  var x: integer;
  procedure q(f: boolean);
    begin 
      f := true
    end;
  begin 
    q(5<4)
  end;
""",
                          os.devnull,
                          suppress_errors=True)
    return error
示例#14
0
def testPassByValueCheck():

    error = compileString("""
program p;
type arr = array [1..10] of boolean;
var a1: arr;
var p: integer;
var boo: boolean;
  procedure f(a: arr; z: boolean);
    begin
      a[1] := z
    end;
  begin 
    p := 1;
    f(a1, 5>4)
  end;
""",
                          os.devnull,
                          suppress_errors=True)
    return error
示例#15
0
def testSelectorCheck():
    #['not a field', 'not a record', 'identifier expected', 'index out of bounds', 'index not integer', 'not an array', '] expected']
    error = compileString("""
program p;
  type arrtype = array [1 .. 7] of integer;
  type rectype = record f: integer; g: arrtype end;
  var p, q: rectype;
  var z: arrtype;
  var x, y: integer;
  begin 
    p.g[8] := 1; {oob}
    p.g[q] := 1; {index not integer}
    p.h := 12; {not a field} 
    z[1 := 2; {] expected}
    q[1] := 1; {not an array}
    x.f := 9; {not a record}
    x.5 := 4 {ident expected}
  end;
""",
                          os.devnull,
                          suppress_errors=True)
    return error
示例#16
0
def testProcedureDeclarationsCheck():
    error = compileString("""
program p;
  x := 5; {declaration expected}
  const x : integer; { = expected, expression not constant, }
  const 5 = 5 {constant name expected}

  var y: integer;
  begin 
    y := 5
  end;
""",
                          os.devnull,
                          suppress_errors=True)

    error += compileString("""
program p;
  const w = 1 {; expected}
  type i : integer { = expected, ; expected}
  type array = array [1..5] of integer; { type name expected}

  var y: integer;
  begin 
    y := 5
  end;
""",
                           os.devnull,
                           suppress_errors=True)

    error += compileString("""
program p;
  var a : integer {; expected}
  var y: integer;

  procedure (5: integer); {procedure name expected, formal params expected}
    begin 
    end;

  begin 
    y := 5
  end;
""",
                           os.devnull,
                           suppress_errors=True)

    error += compileString("""
program p;
  var y: integer;
  procedure myproc (var a: integer { ) expected} 
    begin 
      a := 5
    end;

  procedure anotherproc (var a: integer) { ; expected} 
    begin 
      a := 5
    end {; expected}

  begin 
    y := 5
  end;
""",
                           os.devnull,
                           suppress_errors=True)

    return error