module Text.ANTLR.Language
( Alphabet(..), ascii, isASCII
) where
import Prelude hiding (Word)
import Data.Set.Monad (Set(..))
import qualified Data.Set.Monad as Set
import Data.Char
type Alphabet a = Set a
ascii :: Alphabet Char
ascii :: Alphabet Char
ascii = [Char] -> Alphabet Char
forall a. Ord a => [a] -> Set a
Set.fromList ([Char] -> Alphabet Char) -> [Char] -> Alphabet Char
forall a b. (a -> b) -> a -> b
$ (Int -> Char) -> [Int] -> [Char]
forall a b. (a -> b) -> [a] -> [b]
map Int -> Char
chr [0 .. 127]
isASCII :: Char -> Bool
isASCII :: Char -> Bool
isASCII c :: Char
c = Char -> Int
ord Char
c Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< 127
type Word a = [a]
type Language a = Set (Word a)
union :: (Ord a) => Set a -> Set a -> Set a
union :: Set a -> Set a -> Set a
union = Set a -> Set a -> Set a
forall a. Ord a => Set a -> Set a -> Set a
Set.union
concat :: (Ord a) => Language a -> Language a -> Language a
concat :: Language a -> Language a -> Language a
concat a :: Language a
a b :: Language a
b = [[a]] -> Language a
forall a. Ord a => [a] -> Set a
Set.fromList
[ [a]
s [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a]
t
| [a]
s <- Language a -> [[a]]
forall a. Ord a => Set a -> [a]
Set.toList Language a
a
, [a]
t <- Language a -> [[a]]
forall a. Ord a => Set a -> [a]
Set.toList Language a
b
]
kleene :: a
kleene = a
forall a. HasCallStack => a
undefined