| author | wenzelm |
| Tue, 10 Aug 2010 22:26:23 +0200 | |
| changeset 38266 | 492d377ecfe2 |
| parent 38239 | 89a4d1028fb3 |
| child 38373 | e8197eea3cd0 |
| permissions | -rw-r--r-- |
| 34268 | 1 |
/* Title: Pure/Thy/thy_syntax.scala |
2 |
Author: Makarius |
|
3 |
||
4 |
Superficial theory syntax: command spans. |
|
5 |
*/ |
|
6 |
||
7 |
package isabelle |
|
8 |
||
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 | 13 |
object Thy_Syntax |
| 34268 | 14 |
{
|
|
36956
21be4832c362
renamed class Outer_Lex to Token and Token_Kind to Token.Kind;
wenzelm
parents:
36948
diff
changeset
|
15 |
type Span = List[Token] |
| 34268 | 16 |
|
|
36956
21be4832c362
renamed class Outer_Lex to Token and Token_Kind to Token.Kind;
wenzelm
parents:
36948
diff
changeset
|
17 |
def parse_spans(toks: List[Token]): List[Span] = |
| 34268 | 18 |
{
|
|
38239
89a4d1028fb3
parse_spans: somewhat faster low-level implementation;
wenzelm
parents:
36956
diff
changeset
|
19 |
val result = new mutable.ListBuffer[Span] |
|
89a4d1028fb3
parse_spans: somewhat faster low-level implementation;
wenzelm
parents:
36956
diff
changeset
|
20 |
val span = new mutable.ListBuffer[Token] |
|
89a4d1028fb3
parse_spans: somewhat faster low-level implementation;
wenzelm
parents:
36956
diff
changeset
|
21 |
val whitespace = new mutable.ListBuffer[Token] |
| 34268 | 22 |
|
|
38239
89a4d1028fb3
parse_spans: somewhat faster low-level implementation;
wenzelm
parents:
36956
diff
changeset
|
23 |
def flush(buffer: mutable.ListBuffer[Token]) |
|
89a4d1028fb3
parse_spans: somewhat faster low-level implementation;
wenzelm
parents:
36956
diff
changeset
|
24 |
{
|
|
89a4d1028fb3
parse_spans: somewhat faster low-level implementation;
wenzelm
parents:
36956
diff
changeset
|
25 |
if (!buffer.isEmpty) { result += buffer.toList; buffer.clear }
|
| 34268 | 26 |
} |
|
38239
89a4d1028fb3
parse_spans: somewhat faster low-level implementation;
wenzelm
parents:
36956
diff
changeset
|
27 |
for (tok <- toks) {
|
|
89a4d1028fb3
parse_spans: somewhat faster low-level implementation;
wenzelm
parents:
36956
diff
changeset
|
28 |
if (tok.is_command) { flush(span); flush(whitespace); span += tok }
|
|
89a4d1028fb3
parse_spans: somewhat faster low-level implementation;
wenzelm
parents:
36956
diff
changeset
|
29 |
else if (tok.is_ignored) whitespace += tok |
|
89a4d1028fb3
parse_spans: somewhat faster low-level implementation;
wenzelm
parents:
36956
diff
changeset
|
30 |
else { span ++= whitespace; whitespace.clear; span += tok }
|
|
89a4d1028fb3
parse_spans: somewhat faster low-level implementation;
wenzelm
parents:
36956
diff
changeset
|
31 |
} |
|
89a4d1028fb3
parse_spans: somewhat faster low-level implementation;
wenzelm
parents:
36956
diff
changeset
|
32 |
flush(span); flush(whitespace) |
|
89a4d1028fb3
parse_spans: somewhat faster low-level implementation;
wenzelm
parents:
36956
diff
changeset
|
33 |
result.toList |
| 34268 | 34 |
} |
35 |
} |