clarified signature;
authorwenzelm
Sat, 10 Dec 2022 20:31:47 +0100
changeset 76614 ac08b6e3b9e3
parent 76613 b945e30b7471
child 76615 b865959e2547
clarified signature;
src/Pure/Isar/parse.ML
src/Pure/Isar/parse.scala
src/Pure/Thy/sessions.ML
src/Pure/Thy/sessions.scala
--- a/src/Pure/Isar/parse.ML	Sat Dec 10 15:57:21 2022 +0100
+++ b/src/Pure/Isar/parse.ML	Sat Dec 10 20:31:47 2022 +0100
@@ -72,6 +72,8 @@
   val path_input: Input.source parser
   val path: string parser
   val path_binding: (string * Position.T) parser
+  val in_path: string -> Input.source parser
+  val in_path_parens: string -> Input.source parser
   val chapter_name: (string * Position.T) parser
   val session_name: (string * Position.T) parser
   val theory_name: (string * Position.T) parser
@@ -290,6 +292,12 @@
 val path = path_input >> Input.string_of;
 val path_binding = group (fn () => "path binding (strict file name)") (position embedded);
 
+fun in_path default =
+  Scan.optional ($$$ "in" |-- !!! path_input) (Input.string default);
+
+fun in_path_parens default =
+  Scan.optional ($$$ "(" |-- !!! ($$$ "in" |-- path_input --| $$$ ")")) (Input.string default);
+
 val chapter_name = group (fn () => "chapter name") name_position;
 val session_name = group (fn () => "session name") name_position;
 val theory_name = group (fn () => "theory name") name_position;
--- a/src/Pure/Isar/parse.scala	Sat Dec 10 15:57:21 2022 +0100
+++ b/src/Pure/Isar/parse.scala	Sat Dec 10 20:31:47 2022 +0100
@@ -71,6 +71,12 @@
     def path: Parser[String] =
       atom("file name/path specification", tok => tok.is_embedded && Path.is_wellformed(tok.content))
 
+    def in_path(default: String): Parser[String] =
+      $$$("in") ~! path ^^ { case _ ~ x => x } | success(default)
+
+    def in_path_parens(default: String): Parser[String] =
+      $$$("(") ~! ($$$("in") ~ path ~ $$$(")")) ^^ { case _ ~ (_ ~ x ~ _) => x } | success(default)
+
     def chapter_name: Parser[String] = atom("chapter name", _.is_system_name)
     def session_name: Parser[String] = atom("session name", _.is_system_name)
     def theory_name: Parser[String] = atom("theory name", _.is_system_name)
--- a/src/Pure/Thy/sessions.ML	Sat Dec 10 15:57:21 2022 +0100
+++ b/src/Pure/Thy/sessions.ML	Sat Dec 10 20:31:47 2022 +0100
@@ -31,22 +31,19 @@
 val theories =
   Parse.$$$ "theories" |-- Parse.!!! (Scan.optional Parse.options [] -- Scan.repeat1 theory_entry);
 
-val in_path =
-  Parse.$$$ "(" |-- Parse.!!! (Parse.$$$ "in" |-- Parse.path_input --| Parse.$$$ ")");
-
 val document_theories =
   Parse.$$$ "document_theories" |-- Scan.repeat1 (Parse.input Parse.theory_name);
 
 val document_files =
   Parse.$$$ "document_files" |--
-    Parse.!!! (Scan.optional in_path (Input.string "document") -- Scan.repeat1 Parse.path_input);
+    Parse.!!! (Parse.in_path_parens "document" -- Scan.repeat1 Parse.path_input);
 
 val prune =
   Scan.optional (Parse.$$$ "[" |-- Parse.!!! (Parse.nat --| Parse.$$$ "]")) 0;
 
 val export_files =
   Parse.$$$ "export_files" |--
-    Parse.!!! (Scan.optional in_path (Input.string "export") -- prune -- Scan.repeat1 Parse.embedded);
+    Parse.!!! (Parse.in_path_parens "export" -- prune -- Scan.repeat1 Parse.embedded);
 
 val export_classpath =
   Parse.$$$ "export_classpath" |-- Scan.repeat Parse.embedded;
@@ -68,8 +65,7 @@
       in () end));
 
 val session_parser =
-  Parse.session_name -- groups --
-  Scan.optional (Parse.$$$ "in" |-- Parse.!!! Parse.path_input) (Input.string ".") --
+  Parse.session_name -- groups -- Parse.in_path "." --
   (Parse.$$$ "=" |--
     Parse.!!! (Scan.option (Parse.session_name --| Parse.!!! (Parse.$$$ "+")) -- description --
       Scan.optional (Parse.$$$ "options" |-- Parse.!!! Parse.options) [] --
--- a/src/Pure/Thy/sessions.scala	Sat Dec 10 15:57:21 2022 +0100
+++ b/src/Pure/Thy/sessions.scala	Sat Dec 10 20:31:47 2022 +0100
@@ -893,7 +893,6 @@
   private val CHAPTER_DEFINITION = "chapter_definition"
   private val CHAPTER = "chapter"
   private val SESSION = "session"
-  private val IN = "in"
   private val DESCRIPTION = "description"
   private val DIRECTORIES = "directories"
   private val OPTIONS = "options"
@@ -906,8 +905,8 @@
   private val EXPORT_CLASSPATH = "export_classpath"
 
   val root_syntax: Outer_Syntax =
-    Outer_Syntax.empty + "(" + ")" + "+" + "," + "=" + "[" + "]" +
-      GLOBAL + IN +
+    Outer_Syntax.empty + "(" + ")" + "+" + "," + "=" + "[" + "]" + "in" +
+      GLOBAL +
       (CHAPTER_DEFINITION, Keyword.THY_DECL) +
       (CHAPTER, Keyword.THY_DECL) +
       (SESSION, Keyword.THY_DECL) +
@@ -1007,19 +1006,17 @@
           ((options | success(Nil)) ~ rep1(theory_entry)) ^^
           { case _ ~ (x ~ y) => (x, y) }
 
-      val in_path = $$$("(") ~! ($$$(IN) ~ path ~ $$$(")")) ^^ { case _ ~ (_ ~ x ~ _) => x }
-
       val document_theories =
         $$$(DOCUMENT_THEORIES) ~! rep1(position(name)) ^^ { case _ ~ x => x }
 
       val document_files =
-        $$$(DOCUMENT_FILES) ~!
-          ((in_path | success("document")) ~ rep1(path)) ^^ { case _ ~ (x ~ y) => y.map((x, _)) }
+        $$$(DOCUMENT_FILES) ~! (in_path_parens("document") ~ rep1(path)) ^^
+          { case _ ~ (x ~ y) => y.map((x, _)) }
 
       val prune = $$$("[") ~! (nat ~ $$$("]")) ^^ { case _ ~ (x ~ _) => x } | success(0)
 
       val export_files =
-        $$$(EXPORT_FILES) ~! ((in_path | success("export")) ~ prune ~ rep1(embedded)) ^^
+        $$$(EXPORT_FILES) ~! (in_path_parens("export") ~ prune ~ rep1(embedded)) ^^
           { case _ ~ (x ~ y ~ z) => (x, y, z) }
 
       val export_classpath =
@@ -1027,8 +1024,7 @@
           { case _ ~ x => x }
 
       command(SESSION) ~!
-        (position(session_name) ~ groups ~
-          (($$$(IN) ~! path ^^ { case _ ~ x => x }) | success(".")) ~
+        (position(session_name) ~ groups ~ in_path(".") ~
           ($$$("=") ~!
             (opt(session_name ~! $$$("+") ^^ { case x ~ _ => x }) ~ description ~
               (($$$(OPTIONS) ~! options ^^ { case _ ~ x => x }) | success(Nil)) ~