Token.hs 2.94 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
-- Copyright (c) 2013, Kenton Varda <temporal@gmail.com>
-- All rights reserved.
--
-- Redistribution and use in source and binary forms, with or without
-- modification, are permitted provided that the following conditions are met:
--
-- 1. Redistributions of source code must retain the above copyright notice, this
--    list of conditions and the following disclaimer.
-- 2. Redistributions in binary form must reproduce the above copyright notice,
--    this list of conditions and the following disclaimer in the documentation
--    and/or other materials provided with the distribution.
--
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-- ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

module Token where

import Text.Parsec.Pos (SourcePos, sourceLine, sourceColumn)
import Text.Printf (printf)

Kenton Varda's avatar
Kenton Varda committed
29
data Located t = Located { locatedPos :: SourcePos, locatedValue :: t }
30 31 32 33

instance Show t => Show (Located t) where
    show (Located pos x) = printf "%d:%d:%s" (sourceLine pos) (sourceColumn pos) (show x)

Kenton Varda's avatar
Kenton Varda committed
34 35 36 37 38 39
instance Eq a => Eq (Located a) where
    Located _ a == Located _ b = a == b

instance Ord a => Ord (Located a) where
    compare (Located _ a) (Located _ b) = compare a b

40 41
data TokenSequence = TokenSequence [Located Token] SourcePos deriving(Show, Eq)

42
data Token = Identifier String
43
           | TypeIdentifier String
44 45
           | ParenthesizedList [TokenSequence]
           | BracketedList [TokenSequence]
46 47 48
           | LiteralInt Integer
           | LiteralFloat Double
           | LiteralString String
49
           | VoidKeyword
50 51
           | TrueKeyword
           | FalseKeyword
52 53 54 55
           | AtSign
           | Colon
           | Period
           | EqualsSign
Kenton Varda's avatar
Kenton Varda committed
56
           | MinusSign
Kenton Varda's avatar
Kenton Varda committed
57
           | ExclamationPoint
Kenton Varda's avatar
Kenton Varda committed
58
           | InKeyword
Kenton Varda's avatar
Kenton Varda committed
59 60
           | OfKeyword    -- We reserve some common, short English words for use as future keywords.
           | OnKeyword
Kenton Varda's avatar
Kenton Varda committed
61 62 63
           | AsKeyword
           | WithKeyword
           | FromKeyword
64
           | ImportKeyword
65
           | UsingKeyword
66 67
           | ConstKeyword
           | EnumKeyword
Kenton Varda's avatar
Kenton Varda committed
68
           | StructKeyword
Kenton Varda's avatar
Kenton Varda committed
69
           | UnionKeyword
70 71 72 73
           | InterfaceKeyword
           | OptionKeyword
           deriving (Show, Eq)

74 75
data Statement = Line TokenSequence
               | Block TokenSequence [Located Statement]
76
               deriving (Show)