src/HOL/Lex/Auto.thy
author paulson
Thu, 18 Jan 1996 10:38:29 +0100
changeset 1444 23ceb1dc9755
parent 1374 5e407f2a3323
child 1476 608483c2122a
permissions -rw-r--r--
trivial updates
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1344
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     1
(*  Title: 	HOL/Lex/Auto.thy
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     2
    ID:         $Id$
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     3
    Author: 	Tobias Nipkow
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     4
    Copyright   1995 TUM
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     5
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     6
Automata expressed as triples of
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     7
  1. a start state,
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     8
  2. a transition function and
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     9
  3. a test for final states.
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    10
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    11
NOTE: this functional representation is suitable for all kinds of automata,
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    12
      not just finite ones!
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    13
*)
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    14
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    15
Auto = Prefix +
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    16
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    17
types ('a,'b)auto = "'b * ('b => 'a => 'b) * ('b => bool)"
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    18
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    19
consts
1374
5e407f2a3323 removed quotes from consts and syntax sections
clasohm
parents: 1344
diff changeset
    20
  start :: ('a, 'b)auto => 'b
5e407f2a3323 removed quotes from consts and syntax sections
clasohm
parents: 1344
diff changeset
    21
  next  :: ('a, 'b)auto => ('b => 'a => 'b)
5e407f2a3323 removed quotes from consts and syntax sections
clasohm
parents: 1344
diff changeset
    22
  fin   :: ('a, 'b)auto => ('b => bool)
5e407f2a3323 removed quotes from consts and syntax sections
clasohm
parents: 1344
diff changeset
    23
  nexts :: ('a, 'b)auto => 'b => 'a list => 'b
5e407f2a3323 removed quotes from consts and syntax sections
clasohm
parents: 1344
diff changeset
    24
  accepts :: ('a,'b) auto => 'a list => bool  
5e407f2a3323 removed quotes from consts and syntax sections
clasohm
parents: 1344
diff changeset
    25
  acc_prefix :: ('a, 'b)auto => 'b => 'a list => bool
1344
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    26
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    27
defs
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    28
  start_def "start(A) == fst(A)"
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    29
  next_def  "next(A) == fst(snd(A))"
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    30
  fin_def   "fin(A) == snd(snd(A))"
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    31
  nexts_def "nexts(A) == foldl(next(A))"
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    32
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    33
  accepts_def "accepts A xs == fin A (nexts A (start A) xs)"
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    34
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    35
  acc_prefix_def
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    36
    "acc_prefix A st xs == ? us. us <= xs & us~=[] & fin A (nexts A st us)"
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    37
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    38
end