progs/lexer/toks.scala.orig
changeset 729 b147a10be8dd
parent 728 c669b39debe3
child 730 18fee9d3b6a8
equal deleted inserted replaced
728:c669b39debe3 729:b147a10be8dd
     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 
       
    45 
       
    46 // Fib program
       
    47 //=============
       
    48 
       
    49 /*
       
    50 write "Fib";
       
    51 read n;  
       
    52 minus1 := 0;
       
    53 minus2 := 1;
       
    54 while n > 0 do {
       
    55        temp := minus2;
       
    56        minus2 := minus1 + minus2;
       
    57        minus1 := temp;
       
    58        n := n - 1
       
    59 };
       
    60 write "Result";
       
    61 write minus2
       
    62 */
       
    63 
       
    64 val fib =
       
    65   List(T_KWD("write"), T_STR("Fib"), T_SEMI, T_KWD("read"), T_ID("n"), 
       
    66        T_SEMI, T_ID("minus1"), T_OP(":="), T_NUM(0), T_SEMI, T_ID("minus2"), 
       
    67        T_OP(":="), T_NUM(1), T_SEMI, T_KWD("while"), T_ID("n"), T_OP(">"), 
       
    68        T_NUM(0), T_KWD("do"), T_LPAREN, T_ID("temp"), T_OP(":="), 
       
    69        T_ID("minus2"), T_SEMI, T_ID("minus2"), T_OP(":="), T_ID("minus1"), 
       
    70        T_OP("+"), T_ID("minus2"), T_SEMI, T_ID("minus1"), T_OP(":="), 
       
    71        T_ID("temp"), T_SEMI, T_ID("n"), T_OP(":="), T_ID("n"), T_OP("-"), 
       
    72        T_NUM(1), T_RPAREN, T_SEMI, T_KWD("write"), T_STR("Result"), T_SEMI, 
       
    73        T_KWD("write"), T_ID("minus2"))
       
    74 
       
    75 
       
    76 
       
    77 // Factors program
       
    78 //=================
       
    79 
       
    80 /*
       
    81 write "Input n please";
       
    82 read n;
       
    83 write "The factors of n are";
       
    84 f := 2;
       
    85 while n != 1 do {
       
    86     while (n / f) * f == n do {
       
    87         write f;
       
    88         n := n / f
       
    89     };
       
    90     f := f + 1
       
    91 }
       
    92 */
       
    93 
       
    94 val factors = 
       
    95   List(T_KWD("write"), T_STR("Input n please"), T_SEMI, T_KWD("read"), 
       
    96        T_ID("n"), T_SEMI, T_KWD("write"), T_STR("The factors of n are"), 
       
    97        T_SEMI, T_ID("f"), T_OP(":="), T_NUM(2), T_SEMI, T_KWD("while"), 
       
    98        T_ID("n"), T_OP("!="), T_NUM(1), T_KWD("do"), T_LPAREN, 
       
    99        T_KWD("while"), T_ID("n"), T_OP("/"), T_ID("f"), T_OP("*"), 
       
   100        T_ID("f"), T_OP("=="), T_ID("n"), T_KWD("do"), T_LPAREN, 
       
   101        T_KWD("write"), T_ID("f"), T_SEMI, T_ID("n"), T_OP(":="), 
       
   102        T_ID("n"), T_OP("/"), T_ID("f"), T_RPAREN, T_SEMI, T_ID("f"), 
       
   103        T_OP(":="), T_ID("f"), T_OP("+"), T_NUM(1), T_RPAREN)
       
   104 
       
   105 
       
   106 // Primes program
       
   107 //================
       
   108 
       
   109 /*
       
   110 end := 100;
       
   111 n := 2;
       
   112 while (n < end) do {
       
   113   f := 2;
       
   114   tmp := 0;
       
   115   while ((f < n / 2 + 1) && (tmp == 0)) do {
       
   116     if ((n / f) * f == n) then  { tmp := 1 } else { skip };
       
   117     f := f + 1
       
   118   };
       
   119   if (tmp == 0) then { write(n) } else { skip };
       
   120   n  := n + 1
       
   121 }
       
   122 */
       
   123 
       
   124 val primes =
       
   125   List(T_ID("end"), T_OP(":="), T_NUM(100), T_SEMI, T_ID("n"), T_OP(":="), 
       
   126        T_NUM(2), T_SEMI, T_KWD("while"), T_ID("n"), T_OP("<"), T_ID("end"), 
       
   127        T_KWD("do"), T_LPAREN, T_ID("f"), T_OP(":="), T_NUM(2), T_SEMI, 
       
   128        T_ID("tmp"), T_OP(":="), T_NUM(0), T_SEMI, T_KWD("while"), T_ID("f"), 
       
   129        T_OP("<"), T_ID("n"), T_OP("/"), T_NUM(2), T_OP("+"), T_NUM(1), 
       
   130        T_OP("&&"), T_ID("tmp"), T_OP("=="), T_NUM(0), T_KWD("do"), T_LPAREN, 
       
   131        T_KWD("if"), T_ID("n"), T_OP("/"), T_ID("f"), T_OP("*"), T_ID("f"), 
       
   132        T_OP("=="), T_ID("n"), T_KWD("then"), T_LPAREN, T_ID("tmp"), T_OP(":="),
       
   133        T_NUM(1), T_RPAREN, T_KWD("else"), T_LPAREN, T_KWD("skip"), T_RPAREN, 
       
   134        T_SEMI, T_ID("f"), T_OP(":="), T_ID("f"), T_OP("+"), T_NUM(1), 
       
   135        T_RPAREN, T_SEMI, T_KWD("if"), T_ID("tmp"), T_OP("=="), T_NUM(0), 
       
   136        T_KWD("then"), T_LPAREN, T_KWD("write"), T_ID("n"), T_RPAREN, 
       
   137        T_KWD("else"), T_LPAREN, T_KWD("skip"), T_RPAREN, T_SEMI, T_ID("n"), 
       
   138        T_OP(":="), T_ID("n"), T_OP("+"), T_NUM(1), T_RPAREN)