support for floating-point tokens in outer syntax (coinciding with inner syntax version);
authorwenzelm
Sat, 30 Oct 2010 15:26:40 +0200
changeset 4053647f572aff50a
parent 40535 b89dae026bae
child 40537 012ed4426fda
support for floating-point tokens in outer syntax (coinciding with inner syntax version);
doc-src/IsarRef/Thy/Outer_Syntax.thy
doc-src/IsarRef/Thy/document/Outer_Syntax.tex
src/Pure/General/scan.scala
src/Pure/Isar/parse.ML
src/Pure/Isar/token.ML
src/Pure/Isar/token.scala
src/Pure/Syntax/lexicon.ML
src/Pure/Thy/thy_syntax.ML
     1.1 --- a/doc-src/IsarRef/Thy/Outer_Syntax.thy	Fri Oct 29 23:15:01 2010 +0200
     1.2 +++ b/doc-src/IsarRef/Thy/Outer_Syntax.thy	Sat Oct 30 15:26:40 2010 +0200
     1.3 @@ -108,6 +108,7 @@
     1.4      @{syntax_def longident} & = & @{text "ident("}@{verbatim "."}@{text "ident)\<^sup>+"} \\
     1.5      @{syntax_def symident} & = & @{text "sym\<^sup>+  |  "}@{verbatim "\\"}@{verbatim "<"}@{text ident}@{verbatim ">"} \\
     1.6      @{syntax_def nat} & = & @{text "digit\<^sup>+"} \\
     1.7 +    @{syntax_def float} & = & @{syntax_ref nat}@{verbatim "."}@{syntax_ref nat}@{text "  |  "}@{verbatim "-"}@{syntax_ref nat}@{verbatim "."}@{syntax_ref nat} \\
     1.8      @{syntax_def var} & = & @{verbatim "?"}@{text "ident  |  "}@{verbatim "?"}@{text ident}@{verbatim "."}@{text nat} \\
     1.9      @{syntax_def typefree} & = & @{verbatim "'"}@{text ident} \\
    1.10      @{syntax_def typevar} & = & @{verbatim "?"}@{text "typefree  |  "}@{verbatim "?"}@{text typefree}@{verbatim "."}@{text nat} \\
     2.1 --- a/doc-src/IsarRef/Thy/document/Outer_Syntax.tex	Fri Oct 29 23:15:01 2010 +0200
     2.2 +++ b/doc-src/IsarRef/Thy/document/Outer_Syntax.tex	Sat Oct 30 15:26:40 2010 +0200
     2.3 @@ -127,6 +127,7 @@
     2.4      \indexdef{}{syntax}{longident}\hypertarget{syntax.longident}{\hyperlink{syntax.longident}{\mbox{\isa{longident}}}} & = & \isa{{\isachardoublequote}ident{\isacharparenleft}{\isachardoublequote}}\verb|.|\isa{{\isachardoublequote}ident{\isacharparenright}\isactrlsup {\isacharplus}{\isachardoublequote}} \\
     2.5      \indexdef{}{syntax}{symident}\hypertarget{syntax.symident}{\hyperlink{syntax.symident}{\mbox{\isa{symident}}}} & = & \isa{{\isachardoublequote}sym\isactrlsup {\isacharplus}\ \ {\isacharbar}\ \ {\isachardoublequote}}\verb|\|\verb|<|\isa{ident}\verb|>| \\
     2.6      \indexdef{}{syntax}{nat}\hypertarget{syntax.nat}{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}} & = & \isa{{\isachardoublequote}digit\isactrlsup {\isacharplus}{\isachardoublequote}} \\
     2.7 +    \indexdef{}{syntax}{float}\hypertarget{syntax.float}{\hyperlink{syntax.float}{\mbox{\isa{float}}}} & = & \indexref{}{syntax}{nat}\hyperlink{syntax.nat}{\mbox{\isa{nat}}}\verb|.|\indexref{}{syntax}{nat}\hyperlink{syntax.nat}{\mbox{\isa{nat}}}\isa{{\isachardoublequote}\ \ {\isacharbar}\ \ {\isachardoublequote}}\verb|-|\indexref{}{syntax}{nat}\hyperlink{syntax.nat}{\mbox{\isa{nat}}}\verb|.|\indexref{}{syntax}{nat}\hyperlink{syntax.nat}{\mbox{\isa{nat}}} \\
     2.8      \indexdef{}{syntax}{var}\hypertarget{syntax.var}{\hyperlink{syntax.var}{\mbox{\isa{var}}}} & = & \verb|?|\isa{{\isachardoublequote}ident\ \ {\isacharbar}\ \ {\isachardoublequote}}\verb|?|\isa{ident}\verb|.|\isa{nat} \\
     2.9      \indexdef{}{syntax}{typefree}\hypertarget{syntax.typefree}{\hyperlink{syntax.typefree}{\mbox{\isa{typefree}}}} & = & \verb|'|\isa{ident} \\
    2.10      \indexdef{}{syntax}{typevar}\hypertarget{syntax.typevar}{\hyperlink{syntax.typevar}{\mbox{\isa{typevar}}}} & = & \verb|?|\isa{{\isachardoublequote}typefree\ \ {\isacharbar}\ \ {\isachardoublequote}}\verb|?|\isa{typefree}\verb|.|\isa{nat} \\
     3.1 --- a/src/Pure/General/scan.scala	Fri Oct 29 23:15:01 2010 +0200
     3.2 +++ b/src/Pure/General/scan.scala	Sat Oct 30 15:26:40 2010 +0200
     3.3 @@ -262,6 +262,7 @@
     3.4      {
     3.5        val id = one(symbols.is_letter) ~ many(symbols.is_letdig) ^^ { case x ~ y => x + y }
     3.6        val nat = many1(symbols.is_digit)
     3.7 +      val natdot = nat ~ "." ~ nat ^^ { case x ~ y ~ z => x + y + z }
     3.8        val id_nat = id ~ opt("." ~ nat) ^^ { case x ~ Some(y ~ z) => x + y + z case x ~ None => x }
     3.9  
    3.10        val ident = id ~ rep("." ~> id) ^^
    3.11 @@ -272,6 +273,8 @@
    3.12        val type_ident = "'" ~ id ^^ { case x ~ y => Token(Token.Kind.TYPE_IDENT, x + y) }
    3.13        val type_var = "?'" ~ id_nat ^^ { case x ~ y => Token(Token.Kind.TYPE_VAR, x + y) }
    3.14        val nat_ = nat ^^ (x => Token(Token.Kind.NAT, x))
    3.15 +      val float =
    3.16 +        ("-" ~ natdot ^^ { case x ~ y => x + y } | natdot) ^^ (x => Token(Token.Kind.FLOAT, x))
    3.17  
    3.18        val sym_ident =
    3.19          (many1(symbols.is_symbolic_char) |
    3.20 @@ -294,7 +297,7 @@
    3.21        (space | (string | (alt_string | (verbatim ^^ (x => Token(Token.Kind.VERBATIM, x)) |
    3.22          comment ^^ (x => Token(Token.Kind.COMMENT, x)))))) |
    3.23        bad_delimiter |
    3.24 -      ((ident | (var_ | (type_ident | (type_var | (nat_ | sym_ident))))) |||
    3.25 +      ((ident | (var_ | (type_ident | (type_var | (float | (nat_ | sym_ident)))))) |||
    3.26          keyword ^^ (x => Token(if (is_command(x)) Token.Kind.COMMAND else Token.Kind.KEYWORD, x))) |
    3.27        bad
    3.28      }
     4.1 --- a/src/Pure/Isar/parse.ML	Fri Oct 29 23:15:01 2010 +0200
     4.2 +++ b/src/Pure/Isar/parse.ML	Sat Oct 30 15:26:40 2010 +0200
     4.3 @@ -26,6 +26,7 @@
     4.4    val type_ident: string parser
     4.5    val type_var: string parser
     4.6    val number: string parser
     4.7 +  val float_number: string parser
     4.8    val string: string parser
     4.9    val alt_string: string parser
    4.10    val verbatim: string parser
    4.11 @@ -46,6 +47,7 @@
    4.12    val opt_begin: bool parser
    4.13    val nat: int parser
    4.14    val int: int parser
    4.15 +  val real: real parser
    4.16    val enum: string -> 'a parser -> 'a list parser
    4.17    val enum1: string -> 'a parser -> 'a list parser
    4.18    val and_list: 'a parser -> 'a list parser
    4.19 @@ -168,6 +170,7 @@
    4.20  val type_ident = kind Token.TypeIdent;
    4.21  val type_var = kind Token.TypeVar;
    4.22  val number = kind Token.Nat;
    4.23 +val float_number = kind Token.Float;
    4.24  val string = kind Token.String;
    4.25  val alt_string = kind Token.AltString;
    4.26  val verbatim = kind Token.Verbatim;
    4.27 @@ -192,6 +195,7 @@
    4.28  
    4.29  val nat = number >> (#1 o Library.read_int o Symbol.explode);
    4.30  val int = Scan.optional (minus >> K ~1) 1 -- nat >> op *;
    4.31 +val real = float_number >> (the o Real.fromString);
    4.32  
    4.33  val tag_name = group "tag name" (short_ident || string);
    4.34  val tags = Scan.repeat ($$$ "%" |-- !!! tag_name);
     5.1 --- a/src/Pure/Isar/token.ML	Fri Oct 29 23:15:01 2010 +0200
     5.2 +++ b/src/Pure/Isar/token.ML	Sat Oct 30 15:26:40 2010 +0200
     5.3 @@ -8,7 +8,7 @@
     5.4  sig
     5.5    datatype kind =
     5.6      Command | Keyword | Ident | LongIdent | SymIdent | Var | TypeIdent | TypeVar |
     5.7 -    Nat | String | AltString | Verbatim | Space | Comment | InternalValue |
     5.8 +    Nat | Float | String | AltString | Verbatim | Space | Comment | InternalValue |
     5.9      Malformed | Error of string | Sync | EOF
    5.10    datatype value =
    5.11      Text of string | Typ of typ | Term of term | Fact of thm list |
    5.12 @@ -89,7 +89,7 @@
    5.13  
    5.14  datatype kind =
    5.15    Command | Keyword | Ident | LongIdent | SymIdent | Var | TypeIdent | TypeVar |
    5.16 -  Nat | String | AltString | Verbatim | Space | Comment | InternalValue |
    5.17 +  Nat | Float | String | AltString | Verbatim | Space | Comment | InternalValue |
    5.18    Malformed | Error of string | Sync | EOF;
    5.19  
    5.20  datatype T = Token of (Symbol_Pos.text * Position.range) * (kind * string) * slot;
    5.21 @@ -103,7 +103,8 @@
    5.22    | Var => "schematic variable"
    5.23    | TypeIdent => "type variable"
    5.24    | TypeVar => "schematic type variable"
    5.25 -  | Nat => "number"
    5.26 +  | Nat => "natural number"
    5.27 +  | Float => "floating-point number"
    5.28    | String => "string"
    5.29    | AltString => "back-quoted string"
    5.30    | Verbatim => "verbatim text"
    5.31 @@ -351,6 +352,7 @@
    5.32          Syntax.scan_var >> pair Var ||
    5.33          Syntax.scan_tid >> pair TypeIdent ||
    5.34          Syntax.scan_tvar >> pair TypeVar ||
    5.35 +        Syntax.scan_float >> pair Float ||
    5.36          Syntax.scan_nat >> pair Nat ||
    5.37          scan_symid >> pair SymIdent) >> uncurry token));
    5.38  
     6.1 --- a/src/Pure/Isar/token.scala	Fri Oct 29 23:15:01 2010 +0200
     6.2 +++ b/src/Pure/Isar/token.scala	Sat Oct 30 15:26:40 2010 +0200
     6.3 @@ -21,7 +21,8 @@
     6.4      val VAR = Value("schematic variable")
     6.5      val TYPE_IDENT = Value("type variable")
     6.6      val TYPE_VAR = Value("schematic type variable")
     6.7 -    val NAT = Value("number")
     6.8 +    val NAT = Value("natural number")
     6.9 +    val FLOAT = Value("floating-point number")
    6.10      val STRING = Value("string")
    6.11      val ALT_STRING = Value("back-quoted string")
    6.12      val VERBATIM = Value("verbatim text")
     7.1 --- a/src/Pure/Syntax/lexicon.ML	Fri Oct 29 23:15:01 2010 +0200
     7.2 +++ b/src/Pure/Syntax/lexicon.ML	Sat Oct 30 15:26:40 2010 +0200
     7.3 @@ -14,6 +14,7 @@
     7.4    val scan_tid: Symbol_Pos.T list -> Symbol_Pos.T list * Symbol_Pos.T list
     7.5    val scan_nat: Symbol_Pos.T list -> Symbol_Pos.T list * Symbol_Pos.T list
     7.6    val scan_int: Symbol_Pos.T list -> Symbol_Pos.T list * Symbol_Pos.T list
     7.7 +  val scan_float: Symbol_Pos.T list -> Symbol_Pos.T list * Symbol_Pos.T list
     7.8    val scan_hex: Symbol_Pos.T list -> Symbol_Pos.T list * Symbol_Pos.T list
     7.9    val scan_bin: Symbol_Pos.T list -> Symbol_Pos.T list * Symbol_Pos.T list
    7.10    val scan_var: Symbol_Pos.T list -> Symbol_Pos.T list * Symbol_Pos.T list
     8.1 --- a/src/Pure/Thy/thy_syntax.ML	Fri Oct 29 23:15:01 2010 +0200
     8.2 +++ b/src/Pure/Thy/thy_syntax.ML	Sat Oct 30 15:26:40 2010 +0200
     8.3 @@ -56,6 +56,7 @@
     8.4    | Token.TypeIdent     => Markup.tfree
     8.5    | Token.TypeVar       => Markup.tvar
     8.6    | Token.Nat           => Markup.ident
     8.7 +  | Token.Float         => Markup.ident
     8.8    | Token.String        => Markup.string
     8.9    | Token.AltString     => Markup.altstring
    8.10    | Token.Verbatim      => Markup.verbatim