cw2_marking/c5.sc
author Christian Urban <christian.urban@kcl.ac.uk>
Mon, 03 Feb 2025 12:34:38 +0000
changeset 978 8778d23fef92
permissions -rw-r--r--
updated marking scripts
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
978
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     1
// for primitive definitions
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     2
import $file.cw02
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     3
import cw02._
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     4
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     5
def sz(r: Rexp): Int = r match {
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     6
  case ZERO => 1
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     7
  case ONE => 1
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     8
  case CHAR(_) => 1
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     9
  case ALT(r1, r2) => 1 + sz(r1) + sz (r2)
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    10
  case SEQ(r1, r2) => 1 + sz(r1) + sz (r2)
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    11
  case STAR(r1) => 1 + sz(r1)
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    12
  case PLUS(r1) => 1 + sz(r1)
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    13
  case NTIMES(r1, n) => 1 + sz(r1)
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    14
  case OPTIONAL(r1) => 1 + sz(r1)
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    15
  case RECD(_, r1) => 1 + sz(r1)
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    16
  case RANGE(_) => 1
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    17
}
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    18
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    19
assert(sz(RANGE("abc")) != 1)
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    20
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    21
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    22
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    23