src/HOL/Lex/Chopper.thy
author clasohm
Mon, 05 Feb 1996 21:29:06 +0100
changeset 1476 608483c2122a
parent 1374 5e407f2a3323
child 1559 9ba0906aa60d
permissions -rw-r--r--
expanded tabs; incorporated Konrad's changes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1476
608483c2122a expanded tabs; incorporated Konrad's changes
clasohm
parents: 1374
diff changeset
     1
(*  Title:      HOL/Lex/Chopper.thy
1344
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     2
    ID:         $Id$
1476
608483c2122a expanded tabs; incorporated Konrad's changes
clasohm
parents: 1374
diff changeset
     3
    Author:     Tobias Nipkow
1344
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
A 'chopper' is a function which returns
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     7
  1. a chopped up prefix of the input string
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     8
  2. together with the remaining suffix.
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     9
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    10
It is a longest_prefix_chopper if it
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    11
  1. chops up as much of the input as possible and
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    12
  2. chops it up into the longest substrings possible.
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    13
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    14
A chopper is parametrized by a language ('a list => bool),
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    15
i.e. a set of strings.
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    16
*)
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    17
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    18
Chopper = Prefix +
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    19
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    20
types   'a chopper = "'a list => 'a list list * 'a list"
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    21
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    22
consts
1374
5e407f2a3323 removed quotes from consts and syntax sections
clasohm
parents: 1344
diff changeset
    23
  is_longest_prefix_chopper :: ['a list => bool, 'a chopper] => bool
1344
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    24
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    25
defs
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    26
  is_longest_prefix_chopper_def
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    27
    "is_longest_prefix_chopper L chopper == !xs.   \
1476
608483c2122a expanded tabs; incorporated Konrad's changes
clasohm
parents: 1374
diff changeset
    28
\        (!zs. chopper(xs) = ([],zs) --> \
608483c2122a expanded tabs; incorporated Konrad's changes
clasohm
parents: 1374
diff changeset
    29
\              zs=xs & (!ys. ys ~= [] & ys <= xs --> ~L(ys))) &  \
608483c2122a expanded tabs; incorporated Konrad's changes
clasohm
parents: 1374
diff changeset
    30
\        (!ys yss zs. chopper(xs) = (ys#yss,zs) -->                \
608483c2122a expanded tabs; incorporated Konrad's changes
clasohm
parents: 1374
diff changeset
    31
\           ys ~= [] & L(ys) & xs=ys@flat(yss)@zs &   \
1344
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    32
\           chopper(flat(yss)@zs) = (yss,zs) &     \
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    33
\           (!as. as <= xs & ys <= as & ys ~= as --> ~L(as)))"
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    34
end