src/Pure/Thy/thy_syntax.scala
author wenzelm
Sat, 14 Aug 2010 11:52:24 +0200
changeset 38373 e8197eea3cd0
parent 38239 89a4d1028fb3
child 38374 7eb0f6991e25
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34268
b149b7083236 separate module Thy_Syntax for command span parsing;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Thy/thy_syntax.scala
b149b7083236 separate module Thy_Syntax for command span parsing;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
b149b7083236 separate module Thy_Syntax for command span parsing;
wenzelm
parents:
diff changeset
     3
b149b7083236 separate module Thy_Syntax for command span parsing;
wenzelm
parents:
diff changeset
     4
Superficial theory syntax: command spans.
b149b7083236 separate module Thy_Syntax for command span parsing;
wenzelm
parents:
diff changeset
     5
*/
b149b7083236 separate module Thy_Syntax for command span parsing;
wenzelm
parents:
diff changeset
     6
b149b7083236 separate module Thy_Syntax for command span parsing;
wenzelm
parents:
diff changeset
     7
package isabelle
b149b7083236 separate module Thy_Syntax for command span parsing;
wenzelm
parents:
diff changeset
     8
b149b7083236 separate module Thy_Syntax for command span parsing;
wenzelm
parents:
diff changeset
     9
38239
89a4d1028fb3 parse_spans: somewhat faster low-level implementation;
wenzelm
parents: 36956
diff changeset
    10
import scala.collection.mutable
89a4d1028fb3 parse_spans: somewhat faster low-level implementation;
wenzelm
parents: 36956
diff changeset
    11
89a4d1028fb3 parse_spans: somewhat faster low-level implementation;
wenzelm
parents: 36956
diff changeset
    12
34303
98425e77cfeb plain object;
wenzelm
parents: 34268
diff changeset
    13
object Thy_Syntax
34268
b149b7083236 separate module Thy_Syntax for command span parsing;
wenzelm
parents:
diff changeset
    14
{
38373
wenzelm
parents: 38239
diff changeset
    15
  def parse_spans(toks: List[Token]): List[List[Token]] =
34268
b149b7083236 separate module Thy_Syntax for command span parsing;
wenzelm
parents:
diff changeset
    16
  {
38373
wenzelm
parents: 38239
diff changeset
    17
    val result = new mutable.ListBuffer[List[Token]]
38239
89a4d1028fb3 parse_spans: somewhat faster low-level implementation;
wenzelm
parents: 36956
diff changeset
    18
    val span = new mutable.ListBuffer[Token]
89a4d1028fb3 parse_spans: somewhat faster low-level implementation;
wenzelm
parents: 36956
diff changeset
    19
    val whitespace = new mutable.ListBuffer[Token]
34268
b149b7083236 separate module Thy_Syntax for command span parsing;
wenzelm
parents:
diff changeset
    20
38239
89a4d1028fb3 parse_spans: somewhat faster low-level implementation;
wenzelm
parents: 36956
diff changeset
    21
    def flush(buffer: mutable.ListBuffer[Token])
89a4d1028fb3 parse_spans: somewhat faster low-level implementation;
wenzelm
parents: 36956
diff changeset
    22
    {
89a4d1028fb3 parse_spans: somewhat faster low-level implementation;
wenzelm
parents: 36956
diff changeset
    23
      if (!buffer.isEmpty) { result += buffer.toList; buffer.clear }
34268
b149b7083236 separate module Thy_Syntax for command span parsing;
wenzelm
parents:
diff changeset
    24
    }
38239
89a4d1028fb3 parse_spans: somewhat faster low-level implementation;
wenzelm
parents: 36956
diff changeset
    25
    for (tok <- toks) {
89a4d1028fb3 parse_spans: somewhat faster low-level implementation;
wenzelm
parents: 36956
diff changeset
    26
      if (tok.is_command) { flush(span); flush(whitespace); span += tok }
89a4d1028fb3 parse_spans: somewhat faster low-level implementation;
wenzelm
parents: 36956
diff changeset
    27
      else if (tok.is_ignored) whitespace += tok
89a4d1028fb3 parse_spans: somewhat faster low-level implementation;
wenzelm
parents: 36956
diff changeset
    28
      else { span ++= whitespace; whitespace.clear; span += tok }
89a4d1028fb3 parse_spans: somewhat faster low-level implementation;
wenzelm
parents: 36956
diff changeset
    29
    }
89a4d1028fb3 parse_spans: somewhat faster low-level implementation;
wenzelm
parents: 36956
diff changeset
    30
    flush(span); flush(whitespace)
89a4d1028fb3 parse_spans: somewhat faster low-level implementation;
wenzelm
parents: 36956
diff changeset
    31
    result.toList
34268
b149b7083236 separate module Thy_Syntax for command span parsing;
wenzelm
parents:
diff changeset
    32
  }
b149b7083236 separate module Thy_Syntax for command span parsing;
wenzelm
parents:
diff changeset
    33
}