| author | Christian Urban <christian.urban@kcl.ac.uk> | 
| Fri, 24 Oct 2025 10:52:05 +0100 | |
| changeset 1017 | 37b126dbb0e7 | 
| parent 977 | 7a02c5b9e0df | 
| permissions | -rw-r--r-- | 
| 977 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 1 | // for primitive definitions | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 2 | import $file.cw02 | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 3 | import cw02._ | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 4 | |
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 5 | def sz(r: Rexp): Int = r match {
 | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 6 | case ZERO => 1 | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 7 | case ONE => 1 | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 8 | case CHAR(_) => 1 | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 9 | case ALT(r1, r2) => 1 + sz(r1) + sz (r2) | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 10 | case SEQ(r1, r2) => 1 + sz(r1) + sz (r2) | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 11 | case STAR(r1) => 1 + sz(r1) | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 12 | case PLUS(r1) => 1 + sz(r1) | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 13 | case NTIMES(r1, n) => 1 + sz(r1) | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 14 | case OPTIONAL(r1) => 1 + sz(r1) | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 15 | case RECD(_, r1) => 1 + sz(r1) | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 16 | case RANGE(_) => 1 | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 17 | } | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 18 | |
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 19 | assert(sz(RANGE("abc")) != 1)
 | 
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 20 | |
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 21 | |
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 22 | |
| 
7a02c5b9e0df
updated marking scripts
 Christian Urban <christian.urban@kcl.ac.uk> parents: diff
changeset | 23 |