| 687 |      1 | abstract class Token
 | 
|  |      2 | case object T_SEMI extends Token
 | 
|  |      3 | case object T_LPAREN extends Token
 | 
|  |      4 | case object T_RPAREN extends Token
 | 
|  |      5 | case class T_ID(s: String) extends Token
 | 
|  |      6 | case class T_OP(s: String) extends Token
 | 
|  |      7 | case class T_NUM(n: Int) extends Token
 | 
|  |      8 | case class T_KWD(s: String) extends Token
 | 
|  |      9 | case class T_STR(s: String) extends Token
 | 
|  |     10 | 
 | 
|  |     11 | 
 | 
|  |     12 | // Loops program
 | 
|  |     13 | //===============
 | 
|  |     14 | 
 | 
|  |     15 | /*
 | 
|  |     16 | start := 1000; 
 | 
|  |     17 | x := start;
 | 
|  |     18 | y := start;
 | 
|  |     19 | z := start;
 | 
|  |     20 | while 0 < x do {
 | 
|  |     21 |  while 0 < y do {
 | 
|  |     22 |   while 0 < z do { z := z - 1 };
 | 
|  |     23 |   z := start;
 | 
|  |     24 |   y := y - 1
 | 
|  |     25 |  };     
 | 
|  |     26 |  y := start;
 | 
|  |     27 |  x := x - 1
 | 
|  |     28 | }
 | 
|  |     29 | */
 | 
|  |     30 | 
 | 
|  |     31 | val loops =
 | 
|  |     32 |   List(T_ID("start"), T_OP(":="), T_NUM(1000), T_SEMI, T_ID("x"), T_OP(":="), 
 | 
|  |     33 |        T_ID("start"), T_SEMI, T_ID("y"), T_OP(":="), T_ID("start"), T_SEMI, 
 | 
|  |     34 |        T_ID("z"), T_OP(":="), T_ID("start"), T_SEMI, T_KWD("while"), T_NUM(0), 
 | 
|  |     35 |        T_OP("<"), T_ID("x"), T_KWD("do"), T_LPAREN, T_KWD("while"), T_NUM(0), 
 | 
|  |     36 |        T_OP("<"), T_ID("y"), T_KWD("do"), T_LPAREN, T_KWD("while"), T_NUM(0), 
 | 
|  |     37 |        T_OP("<"), T_ID("z"), T_KWD("do"), T_LPAREN, T_ID("z"), T_OP(":="), 
 | 
|  |     38 |        T_ID("z"), T_OP("-"), T_NUM(1), T_RPAREN, T_SEMI, T_ID("z"), T_OP(":="),
 | 
|  |     39 |        T_ID("start"), T_SEMI, T_ID("y"), T_OP(":="), T_ID("y"), T_OP("-"), 
 | 
|  |     40 |        T_NUM(1), T_RPAREN, T_SEMI, T_ID("y"), T_OP(":="), T_ID("start"), 
 | 
|  |     41 |        T_SEMI, T_ID("x"), T_OP(":="), T_ID("x"), T_OP("-"), T_NUM(1), T_RPAREN) 
 | 
|  |     42 | 
 | 
|  |     43 | 
 | 
|  |     44 | // Fib program
 | 
|  |     45 | //=============
 | 
|  |     46 | 
 | 
|  |     47 | /*
 | 
|  |     48 | write "Fib";
 | 
|  |     49 | read n;  
 | 
|  |     50 | minus1 := 0;
 | 
|  |     51 | minus2 := 1;
 | 
|  |     52 | while n > 0 do {
 | 
|  |     53 |        temp := minus2;
 | 
|  |     54 |        minus2 := minus1 + minus2;
 | 
|  |     55 |        minus1 := temp;
 | 
|  |     56 |        n := n - 1
 | 
|  |     57 | };
 | 
|  |     58 | write "Result";
 | 
|  |     59 | write minus2
 | 
|  |     60 | */
 | 
|  |     61 | 
 | 
|  |     62 | val fib =
 | 
|  |     63 |   List(T_KWD("write"), T_STR("Fib"), T_SEMI, T_KWD("read"), T_ID("n"), 
 | 
|  |     64 |        T_SEMI, T_ID("minus1"), T_OP(":="), T_NUM(0), T_SEMI, T_ID("minus2"), 
 | 
|  |     65 |        T_OP(":="), T_NUM(1), T_SEMI, T_KWD("while"), T_ID("n"), T_OP(">"), 
 | 
|  |     66 |        T_NUM(0), T_KWD("do"), T_LPAREN, T_ID("temp"), T_OP(":="), 
 | 
|  |     67 |        T_ID("minus2"), T_SEMI, T_ID("minus2"), T_OP(":="), T_ID("minus1"), 
 | 
|  |     68 |        T_OP("+"), T_ID("minus2"), T_SEMI, T_ID("minus1"), T_OP(":="), 
 | 
|  |     69 |        T_ID("temp"), T_SEMI, T_ID("n"), T_OP(":="), T_ID("n"), T_OP("-"), 
 | 
|  |     70 |        T_NUM(1), T_RPAREN, T_SEMI, T_KWD("write"), T_STR("Result"), T_SEMI, 
 | 
|  |     71 |        T_KWD("write"), T_ID("minus2"))
 | 
|  |     72 | 
 | 
|  |     73 | 
 | 
|  |     74 | 
 | 
|  |     75 | // Factors program
 | 
|  |     76 | //=================
 | 
|  |     77 | 
 | 
|  |     78 | /*
 | 
|  |     79 | write "Input n please";
 | 
|  |     80 | read n;
 | 
|  |     81 | write "The factors of n are";
 | 
|  |     82 | f := 2;
 | 
|  |     83 | while n != 1 do {
 | 
|  |     84 |     while (n / f) * f == n do {
 | 
|  |     85 |         write f;
 | 
|  |     86 |         n := n / f
 | 
|  |     87 |     };
 | 
|  |     88 |     f := f + 1
 | 
|  |     89 | }
 | 
|  |     90 | */
 | 
|  |     91 | 
 | 
|  |     92 | val factors = 
 | 
|  |     93 |   List(T_KWD("write"), T_STR("Input n please"), T_SEMI, T_KWD("read"), 
 | 
|  |     94 |        T_ID("n"), T_SEMI, T_KWD("write"), T_STR("The factors of n are"), 
 | 
|  |     95 |        T_SEMI, T_ID("f"), T_OP(":="), T_NUM(2), T_SEMI, T_KWD("while"), 
 | 
|  |     96 |        T_ID("n"), T_OP("!="), T_NUM(1), T_KWD("do"), T_LPAREN, 
 | 
|  |     97 |        T_KWD("while"), T_ID("n"), T_OP("/"), T_ID("f"), T_OP("*"), 
 | 
|  |     98 |        T_ID("f"), T_OP("=="), T_ID("n"), T_KWD("do"), T_LPAREN, 
 | 
|  |     99 |        T_KWD("write"), T_ID("f"), T_SEMI, T_ID("n"), T_OP(":="), 
 | 
|  |    100 |        T_ID("n"), T_OP("/"), T_ID("f"), T_RPAREN, T_SEMI, T_ID("f"), 
 | 
|  |    101 |        T_OP(":="), T_ID("f"), T_OP("+"), T_NUM(1), T_RPAREN)
 | 
|  |    102 | 
 | 
|  |    103 | 
 | 
|  |    104 | // Primes program
 | 
|  |    105 | //================
 | 
|  |    106 | 
 | 
|  |    107 | /*
 | 
|  |    108 | end := 100;
 | 
|  |    109 | n := 2;
 | 
|  |    110 | while (n < end) do {
 | 
|  |    111 |   f := 2;
 | 
|  |    112 |   tmp := 0;
 | 
|  |    113 |   while ((f < n / 2 + 1) && (tmp == 0)) do {
 | 
|  |    114 |     if ((n / f) * f == n) then  { tmp := 1 } else { skip };
 | 
|  |    115 |     f := f + 1
 | 
|  |    116 |   };
 | 
|  |    117 |   if (tmp == 0) then { write(n) } else { skip };
 | 
|  |    118 |   n  := n + 1
 | 
|  |    119 | }
 | 
|  |    120 | */
 | 
|  |    121 | 
 | 
|  |    122 | val primes =
 | 
|  |    123 |   List(T_ID("end"), T_OP(":="), T_NUM(100), T_SEMI, T_ID("n"), T_OP(":="), 
 | 
|  |    124 |        T_NUM(2), T_SEMI, T_KWD("while"), T_ID("n"), T_OP("<"), T_ID("end"), 
 | 
|  |    125 |        T_KWD("do"), T_LPAREN, T_ID("f"), T_OP(":="), T_NUM(2), T_SEMI, 
 | 
|  |    126 |        T_ID("tmp"), T_OP(":="), T_NUM(0), T_SEMI, T_KWD("while"), T_ID("f"), 
 | 
|  |    127 |        T_OP("<"), T_ID("n"), T_OP("/"), T_NUM(2), T_OP("+"), T_NUM(1), 
 | 
|  |    128 |        T_OP("&&"), T_ID("tmp"), T_OP("=="), T_NUM(0), T_KWD("do"), T_LPAREN, 
 | 
|  |    129 |        T_KWD("if"), T_ID("n"), T_OP("/"), T_ID("f"), T_OP("*"), T_ID("f"), 
 | 
|  |    130 |        T_OP("=="), T_ID("n"), T_KWD("then"), T_LPAREN, T_ID("tmp"), T_OP(":="),
 | 
|  |    131 |        T_NUM(1), T_RPAREN, T_KWD("else"), T_LPAREN, T_KWD("skip"), T_RPAREN, 
 | 
|  |    132 |        T_SEMI, T_ID("f"), T_OP(":="), T_ID("f"), T_OP("+"), T_NUM(1), 
 | 
|  |    133 |        T_RPAREN, T_SEMI, T_KWD("if"), T_ID("tmp"), T_OP("=="), T_NUM(0), 
 | 
|  |    134 |        T_KWD("then"), T_LPAREN, T_KWD("write"), T_ID("n"), T_RPAREN, 
 | 
|  |    135 |        T_KWD("else"), T_LPAREN, T_KWD("skip"), T_RPAREN, T_SEMI, T_ID("n"), 
 | 
|  |    136 |        T_OP(":="), T_ID("n"), T_OP("+"), T_NUM(1), T_RPAREN)
 |