changeset 44185 | 05641edb5d30 |
parent 44163 | 32e0c150c010 |
child 44222 | 9d5ef6cd4ee1 |
44184:49501dc1a7b8 | 44185:05641edb5d30 |
---|---|
26 val lexicon = Scan.Lexicon("%", "(", ")", ";", BEGIN, HEADER, IMPORTS, THEORY, USES) |
26 val lexicon = Scan.Lexicon("%", "(", ")", ";", BEGIN, HEADER, IMPORTS, THEORY, USES) |
27 |
27 |
28 |
28 |
29 /* theory file name */ |
29 /* theory file name */ |
30 |
30 |
31 private val Thy_Name = new Regex(""".*?([^/\\:]+)\.thy""") |
31 private val Thy_Name = new Regex("""(.*?)([^/\\:]+)\.thy""") |
32 |
32 |
33 def thy_name(s: String): Option[String] = |
33 def thy_name(s: String): Option[(String, String)] = |
34 s match { case Thy_Name(name) => Some(name) case _ => None } |
34 s match { case Thy_Name(prefix, name) => Some((prefix, name)) case _ => None } |
35 |
35 |
36 def thy_path(name: String): Path = Path.basic(name).ext("thy") |
36 def thy_path(name: String): Path = Path.basic(name).ext("thy") |
37 |
37 |
38 |
38 |
39 /* header */ |
39 /* header */ |
42 { |
42 { |
43 val file_name = atom("file name", _.is_name) |
43 val file_name = atom("file name", _.is_name) |
44 val theory_name = atom("theory name", _.is_name) |
44 val theory_name = atom("theory name", _.is_name) |
45 |
45 |
46 val file = |
46 val file = |
47 keyword("(") ~! (file_name ~ keyword(")")) ^^ { case _ ~ (x ~ _) => x } | file_name |
47 keyword("(") ~! (file_name ~ keyword(")")) ^^ { case _ ~ (x ~ _) => (x, false) } | |
48 file_name ^^ (x => (x, true)) |
|
48 |
49 |
49 val uses = opt(keyword(USES) ~! (rep1(file))) ^^ { case None => Nil case Some(_ ~ xs) => xs } |
50 val uses = opt(keyword(USES) ~! (rep1(file))) ^^ { case None => Nil case Some(_ ~ xs) => xs } |
50 |
51 |
51 val args = |
52 val args = |
52 theory_name ~ (keyword(IMPORTS) ~! (rep1(theory_name) ~ uses ~ keyword(BEGIN))) ^^ |
53 theory_name ~ (keyword(IMPORTS) ~! (rep1(theory_name) ~ uses ~ keyword(BEGIN))) ^^ |
104 header |
105 header |
105 } |
106 } |
106 } |
107 } |
107 |
108 |
108 |
109 |
109 sealed case class Thy_Header(val name: String, val imports: List[String], val uses: List[String]) |
110 sealed case class Thy_Header( |
111 val name: String, val imports: List[String], val uses: List[(String, Boolean)]) |
|
110 { |
112 { |
111 def map(f: String => String): Thy_Header = |
113 def map(f: String => String): Thy_Header = |
112 Thy_Header(f(name), imports.map(f), uses.map(f)) |
114 Thy_Header(f(name), imports.map(f), uses.map(p => (f(p._1), p._2))) |
113 |
115 |
114 def norm_deps(f: String => String): Thy_Header = |
116 def norm_deps(f: String => String): Thy_Header = |
115 copy(imports = imports.map(name => f(name) + ".thy"), uses = uses.map(f)) |
117 copy(imports = imports.map(name => f(name)), uses = uses.map(p => (f(p._1), p._2))) |
116 } |
118 } |
117 |
119 |