1
0
forked from GitHub/gf-core

Converted GF/Source/*.hs to Unix line endings, to be able to see what happens when I regenerated the files.

This commit is contained in:
bjorn
2008-10-02 13:23:54 +00:00
parent 7c30f07f75
commit c21d0d10b8
8 changed files with 9866 additions and 9866 deletions

View File

@@ -1,307 +1,307 @@
module GF.Source.AbsGF where module GF.Source.AbsGF where
-- Haskell module generated by the BNF converter -- Haskell module generated by the BNF converter
import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Char8 as BS
newtype LString = LString BS.ByteString deriving (Eq,Ord,Show) newtype LString = LString BS.ByteString deriving (Eq,Ord,Show)
newtype PIdent = PIdent ((Int,Int),BS.ByteString) deriving (Eq,Ord,Show) newtype PIdent = PIdent ((Int,Int),BS.ByteString) deriving (Eq,Ord,Show)
data Grammar = data Grammar =
Gr [ModDef] Gr [ModDef]
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data ModDef = data ModDef =
MMain PIdent PIdent [ConcSpec] MMain PIdent PIdent [ConcSpec]
| MModule ComplMod ModType ModBody | MModule ComplMod ModType ModBody
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data ConcSpec = data ConcSpec =
ConcSpec PIdent ConcExp ConcSpec PIdent ConcExp
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data ConcExp = data ConcExp =
ConcExp PIdent [Transfer] ConcExp PIdent [Transfer]
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Transfer = data Transfer =
TransferIn Open TransferIn Open
| TransferOut Open | TransferOut Open
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data ModType = data ModType =
MTAbstract PIdent MTAbstract PIdent
| MTResource PIdent | MTResource PIdent
| MTInterface PIdent | MTInterface PIdent
| MTConcrete PIdent PIdent | MTConcrete PIdent PIdent
| MTInstance PIdent PIdent | MTInstance PIdent PIdent
| MTTransfer PIdent Open Open | MTTransfer PIdent Open Open
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data ModBody = data ModBody =
MBody Extend Opens [TopDef] MBody Extend Opens [TopDef]
| MNoBody [Included] | MNoBody [Included]
| MWith Included [Open] | MWith Included [Open]
| MWithBody Included [Open] Opens [TopDef] | MWithBody Included [Open] Opens [TopDef]
| MWithE [Included] Included [Open] | MWithE [Included] Included [Open]
| MWithEBody [Included] Included [Open] Opens [TopDef] | MWithEBody [Included] Included [Open] Opens [TopDef]
| MReuse PIdent | MReuse PIdent
| MUnion [Included] | MUnion [Included]
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Extend = data Extend =
Ext [Included] Ext [Included]
| NoExt | NoExt
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Opens = data Opens =
NoOpens NoOpens
| OpenIn [Open] | OpenIn [Open]
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Open = data Open =
OName PIdent OName PIdent
| OQualQO QualOpen PIdent | OQualQO QualOpen PIdent
| OQual QualOpen PIdent PIdent | OQual QualOpen PIdent PIdent
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data ComplMod = data ComplMod =
CMCompl CMCompl
| CMIncompl | CMIncompl
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data QualOpen = data QualOpen =
QOCompl QOCompl
| QOIncompl | QOIncompl
| QOInterface | QOInterface
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Included = data Included =
IAll PIdent IAll PIdent
| ISome PIdent [PIdent] | ISome PIdent [PIdent]
| IMinus PIdent [PIdent] | IMinus PIdent [PIdent]
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Def = data Def =
DDecl [Name] Exp DDecl [Name] Exp
| DDef [Name] Exp | DDef [Name] Exp
| DPatt Name [Patt] Exp | DPatt Name [Patt] Exp
| DFull [Name] Exp Exp | DFull [Name] Exp Exp
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data TopDef = data TopDef =
DefCat [CatDef] DefCat [CatDef]
| DefFun [FunDef] | DefFun [FunDef]
| DefFunData [FunDef] | DefFunData [FunDef]
| DefDef [Def] | DefDef [Def]
| DefData [DataDef] | DefData [DataDef]
| DefTrans [Def] | DefTrans [Def]
| DefPar [ParDef] | DefPar [ParDef]
| DefOper [Def] | DefOper [Def]
| DefLincat [PrintDef] | DefLincat [PrintDef]
| DefLindef [Def] | DefLindef [Def]
| DefLin [Def] | DefLin [Def]
| DefPrintCat [PrintDef] | DefPrintCat [PrintDef]
| DefPrintFun [PrintDef] | DefPrintFun [PrintDef]
| DefFlag [FlagDef] | DefFlag [FlagDef]
| DefPrintOld [PrintDef] | DefPrintOld [PrintDef]
| DefLintype [Def] | DefLintype [Def]
| DefPattern [Def] | DefPattern [Def]
| DefPackage PIdent [TopDef] | DefPackage PIdent [TopDef]
| DefVars [Def] | DefVars [Def]
| DefTokenizer PIdent | DefTokenizer PIdent
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data CatDef = data CatDef =
SimpleCatDef PIdent [DDecl] SimpleCatDef PIdent [DDecl]
| ListCatDef PIdent [DDecl] | ListCatDef PIdent [DDecl]
| ListSizeCatDef PIdent [DDecl] Integer | ListSizeCatDef PIdent [DDecl] Integer
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data FunDef = data FunDef =
FunDef [PIdent] Exp FunDef [PIdent] Exp
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data DataDef = data DataDef =
DataDef PIdent [DataConstr] DataDef PIdent [DataConstr]
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data DataConstr = data DataConstr =
DataId PIdent DataId PIdent
| DataQId PIdent PIdent | DataQId PIdent PIdent
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data ParDef = data ParDef =
ParDefDir PIdent [ParConstr] ParDefDir PIdent [ParConstr]
| ParDefIndir PIdent PIdent | ParDefIndir PIdent PIdent
| ParDefAbs PIdent | ParDefAbs PIdent
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data ParConstr = data ParConstr =
ParConstr PIdent [DDecl] ParConstr PIdent [DDecl]
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data PrintDef = data PrintDef =
PrintDef [Name] Exp PrintDef [Name] Exp
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data FlagDef = data FlagDef =
FlagDef PIdent PIdent FlagDef PIdent PIdent
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Name = data Name =
IdentName PIdent IdentName PIdent
| ListName PIdent | ListName PIdent
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data LocDef = data LocDef =
LDDecl [PIdent] Exp LDDecl [PIdent] Exp
| LDDef [PIdent] Exp | LDDef [PIdent] Exp
| LDFull [PIdent] Exp Exp | LDFull [PIdent] Exp Exp
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Exp = data Exp =
EIdent PIdent EIdent PIdent
| EConstr PIdent | EConstr PIdent
| ECons PIdent | ECons PIdent
| ESort Sort | ESort Sort
| EString String | EString String
| EInt Integer | EInt Integer
| EFloat Double | EFloat Double
| EMeta | EMeta
| EEmpty | EEmpty
| EData | EData
| EList PIdent Exps | EList PIdent Exps
| EStrings String | EStrings String
| ERecord [LocDef] | ERecord [LocDef]
| ETuple [TupleComp] | ETuple [TupleComp]
| EIndir PIdent | EIndir PIdent
| ETyped Exp Exp | ETyped Exp Exp
| EProj Exp Label | EProj Exp Label
| EQConstr PIdent PIdent | EQConstr PIdent PIdent
| EQCons PIdent PIdent | EQCons PIdent PIdent
| EApp Exp Exp | EApp Exp Exp
| ETable [Case] | ETable [Case]
| ETTable Exp [Case] | ETTable Exp [Case]
| EVTable Exp [Exp] | EVTable Exp [Exp]
| ECase Exp [Case] | ECase Exp [Case]
| EVariants [Exp] | EVariants [Exp]
| EPre Exp [Altern] | EPre Exp [Altern]
| EStrs [Exp] | EStrs [Exp]
| EConAt PIdent Exp | EConAt PIdent Exp
| EPatt Patt | EPatt Patt
| EPattType Exp | EPattType Exp
| ESelect Exp Exp | ESelect Exp Exp
| ETupTyp Exp Exp | ETupTyp Exp Exp
| EExtend Exp Exp | EExtend Exp Exp
| EGlue Exp Exp | EGlue Exp Exp
| EConcat Exp Exp | EConcat Exp Exp
| EAbstr [Bind] Exp | EAbstr [Bind] Exp
| ECTable [Bind] Exp | ECTable [Bind] Exp
| EProd Decl Exp | EProd Decl Exp
| ETType Exp Exp | ETType Exp Exp
| ELet [LocDef] Exp | ELet [LocDef] Exp
| ELetb [LocDef] Exp | ELetb [LocDef] Exp
| EWhere Exp [LocDef] | EWhere Exp [LocDef]
| EEqs [Equation] | EEqs [Equation]
| EExample Exp String | EExample Exp String
| ELString LString | ELString LString
| ELin PIdent | ELin PIdent
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Exps = data Exps =
NilExp NilExp
| ConsExp Exp Exps | ConsExp Exp Exps
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Patt = data Patt =
PChar PChar
| PChars String | PChars String
| PMacro PIdent | PMacro PIdent
| PM PIdent PIdent | PM PIdent PIdent
| PW | PW
| PV PIdent | PV PIdent
| PCon PIdent | PCon PIdent
| PQ PIdent PIdent | PQ PIdent PIdent
| PInt Integer | PInt Integer
| PFloat Double | PFloat Double
| PStr String | PStr String
| PR [PattAss] | PR [PattAss]
| PTup [PattTupleComp] | PTup [PattTupleComp]
| PC PIdent [Patt] | PC PIdent [Patt]
| PQC PIdent PIdent [Patt] | PQC PIdent PIdent [Patt]
| PDisj Patt Patt | PDisj Patt Patt
| PSeq Patt Patt | PSeq Patt Patt
| PRep Patt | PRep Patt
| PAs PIdent Patt | PAs PIdent Patt
| PNeg Patt | PNeg Patt
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data PattAss = data PattAss =
PA [PIdent] Patt PA [PIdent] Patt
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Label = data Label =
LIdent PIdent LIdent PIdent
| LVar Integer | LVar Integer
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Sort = data Sort =
Sort_Type Sort_Type
| Sort_PType | Sort_PType
| Sort_Tok | Sort_Tok
| Sort_Str | Sort_Str
| Sort_Strs | Sort_Strs
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Bind = data Bind =
BIdent PIdent BIdent PIdent
| BWild | BWild
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Decl = data Decl =
DDec [Bind] Exp DDec [Bind] Exp
| DExp Exp | DExp Exp
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data TupleComp = data TupleComp =
TComp Exp TComp Exp
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data PattTupleComp = data PattTupleComp =
PTComp Patt PTComp Patt
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Case = data Case =
Case Patt Exp Case Patt Exp
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Equation = data Equation =
Equ [Patt] Exp Equ [Patt] Exp
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Altern = data Altern =
Alt Exp Exp Alt Exp Exp
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data DDecl = data DDecl =
DDDec [Bind] Exp DDDec [Bind] Exp
| DDExp Exp | DDExp Exp
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data OldGrammar = data OldGrammar =
OldGr Include [TopDef] OldGr Include [TopDef]
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Include = data Include =
NoIncl NoIncl
| Incl [FileName] | Incl [FileName]
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data FileName = data FileName =
FString String FString String
| FIdent PIdent | FIdent PIdent
| FSlash FileName | FSlash FileName
| FDot FileName | FDot FileName
| FMinus FileName | FMinus FileName
| FAddId PIdent FileName | FAddId PIdent FileName
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)

View File

@@ -1,26 +1,26 @@
-- BNF Converter: Error Monad -- BNF Converter: Error Monad
-- Copyright (C) 2004 Author: Aarne Ranta -- Copyright (C) 2004 Author: Aarne Ranta
-- This file comes with NO WARRANTY and may be used FOR ANY PURPOSE. -- This file comes with NO WARRANTY and may be used FOR ANY PURPOSE.
module GF.Source.ErrM where module GF.Source.ErrM where
-- the Error monad: like Maybe type with error msgs -- the Error monad: like Maybe type with error msgs
import Control.Monad (MonadPlus(..), liftM) import Control.Monad (MonadPlus(..), liftM)
data Err a = Ok a | Bad String data Err a = Ok a | Bad String
deriving (Read, Show, Eq, Ord) deriving (Read, Show, Eq, Ord)
instance Monad Err where instance Monad Err where
return = Ok return = Ok
fail = Bad fail = Bad
Ok a >>= f = f a Ok a >>= f = f a
Bad s >>= f = Bad s Bad s >>= f = Bad s
instance Functor Err where instance Functor Err where
fmap = liftM fmap = liftM
instance MonadPlus Err where instance MonadPlus Err where
mzero = Bad "Err.mzero" mzero = Bad "Err.mzero"
mplus (Bad _) y = y mplus (Bad _) y = y
mplus x _ = x mplus x _ = x

File diff suppressed because one or more lines are too long

View File

@@ -1,144 +1,144 @@
-- -*- haskell -*- -- -*- haskell -*-
-- This Alex file was machine-generated by the BNF converter -- This Alex file was machine-generated by the BNF converter
{ {
{-# OPTIONS -fno-warn-incomplete-patterns #-} {-# OPTIONS -fno-warn-incomplete-patterns #-}
module GF.Source.LexGF where module GF.Source.LexGF where
import GF.Source.SharedString import GF.Source.SharedString
import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Char8 as BS
} }
$l = [a-zA-Z\192 - \255] # [\215 \247] -- isolatin1 letter FIXME $l = [a-zA-Z\192 - \255] # [\215 \247] -- isolatin1 letter FIXME
$c = [A-Z\192-\221] # [\215] -- capital isolatin1 letter FIXME $c = [A-Z\192-\221] # [\215] -- capital isolatin1 letter FIXME
$s = [a-z\222-\255] # [\247] -- small isolatin1 letter FIXME $s = [a-z\222-\255] # [\247] -- small isolatin1 letter FIXME
$d = [0-9] -- digit $d = [0-9] -- digit
$i = [$l $d _ '] -- identifier character $i = [$l $d _ '] -- identifier character
$u = [\0-\255] -- universal: any character $u = [\0-\255] -- universal: any character
@rsyms = -- symbols and non-identifier-like reserved words @rsyms = -- symbols and non-identifier-like reserved words
\; | \= | \{ | \} | \( | \) | \* \* | \: | \- \> | \, | \[ | \] | \- | \. | \| | \% | \? | \< | \> | \@ | \# | \! | \* | \+ | \+ \+ | \\ | \= \> | \_ | \$ | \/ \; | \= | \{ | \} | \( | \) | \* \* | \: | \- \> | \, | \[ | \] | \- | \. | \| | \% | \? | \< | \> | \@ | \# | \! | \* | \+ | \+ \+ | \\ | \= \> | \_ | \$ | \/
:- :-
"--" [.]* ; -- Toss single line comments "--" [.]* ; -- Toss single line comments
"{-" ([$u # \-] | \- [$u # \}])* ("-")+ "}" ; "{-" ([$u # \-] | \- [$u # \}])* ("-")+ "}" ;
$white+ ; $white+ ;
@rsyms { tok (\p s -> PT p (eitherResIdent (T_PIdent . share) s)) } @rsyms { tok (\p s -> PT p (eitherResIdent (T_PIdent . share) s)) }
\' ($u # \')* \' { tok (\p s -> PT p (eitherResIdent (T_LString . share) s)) } \' ($u # \')* \' { tok (\p s -> PT p (eitherResIdent (T_LString . share) s)) }
(\_ | $l)($l | $d | \_ | \')* { tok (\p s -> PT p (eitherResIdent (T_PIdent . share) s)) } (\_ | $l)($l | $d | \_ | \')* { tok (\p s -> PT p (eitherResIdent (T_PIdent . share) s)) }
$l $i* { tok (\p s -> PT p (eitherResIdent (TV . share) s)) } $l $i* { tok (\p s -> PT p (eitherResIdent (TV . share) s)) }
\" ([$u # [\" \\ \n]] | (\\ (\" | \\ | \' | n | t)))* \"{ tok (\p s -> PT p (TL $ share $ unescapeInitTail s)) } \" ([$u # [\" \\ \n]] | (\\ (\" | \\ | \' | n | t)))* \"{ tok (\p s -> PT p (TL $ share $ unescapeInitTail s)) }
$d+ { tok (\p s -> PT p (TI $ share s)) } $d+ { tok (\p s -> PT p (TI $ share s)) }
$d+ \. $d+ (e (\-)? $d+)? { tok (\p s -> PT p (TD $ share s)) } $d+ \. $d+ (e (\-)? $d+)? { tok (\p s -> PT p (TD $ share s)) }
{ {
tok f p s = f p s tok f p s = f p s
share :: BS.ByteString -> BS.ByteString share :: BS.ByteString -> BS.ByteString
share = shareString share = shareString
data Tok = data Tok =
TS !BS.ByteString !Int -- reserved words and symbols TS !BS.ByteString !Int -- reserved words and symbols
| TL !BS.ByteString -- string literals | TL !BS.ByteString -- string literals
| TI !BS.ByteString -- integer literals | TI !BS.ByteString -- integer literals
| TV !BS.ByteString -- identifiers | TV !BS.ByteString -- identifiers
| TD !BS.ByteString -- double precision float literals | TD !BS.ByteString -- double precision float literals
| TC !BS.ByteString -- character literals | TC !BS.ByteString -- character literals
| T_LString !BS.ByteString | T_LString !BS.ByteString
| T_PIdent !BS.ByteString | T_PIdent !BS.ByteString
deriving (Eq,Show,Ord) deriving (Eq,Show,Ord)
data Token = data Token =
PT Posn Tok PT Posn Tok
| Err Posn | Err Posn
deriving (Eq,Show,Ord) deriving (Eq,Show,Ord)
tokenPos (PT (Pn _ l _) _ :_) = "line " ++ show l tokenPos (PT (Pn _ l _) _ :_) = "line " ++ show l
tokenPos (Err (Pn _ l _) :_) = "line " ++ show l tokenPos (Err (Pn _ l _) :_) = "line " ++ show l
tokenPos _ = "end of file" tokenPos _ = "end of file"
posLineCol (Pn _ l c) = (l,c) posLineCol (Pn _ l c) = (l,c)
mkPosToken t@(PT p _) = (posLineCol p, prToken t) mkPosToken t@(PT p _) = (posLineCol p, prToken t)
prToken t = case t of prToken t = case t of
PT _ (TS s _) -> s PT _ (TS s _) -> s
PT _ (TL s) -> s PT _ (TL s) -> s
PT _ (TI s) -> s PT _ (TI s) -> s
PT _ (TV s) -> s PT _ (TV s) -> s
PT _ (TD s) -> s PT _ (TD s) -> s
PT _ (TC s) -> s PT _ (TC s) -> s
PT _ (T_LString s) -> s PT _ (T_LString s) -> s
PT _ (T_PIdent s) -> s PT _ (T_PIdent s) -> s
data BTree = N | B BS.ByteString Tok BTree BTree deriving (Show) data BTree = N | B BS.ByteString Tok BTree BTree deriving (Show)
eitherResIdent :: (BS.ByteString -> Tok) -> BS.ByteString -> Tok eitherResIdent :: (BS.ByteString -> Tok) -> BS.ByteString -> Tok
eitherResIdent tv s = treeFind resWords eitherResIdent tv s = treeFind resWords
where where
treeFind N = tv s treeFind N = tv s
treeFind (B a t left right) | s < a = treeFind left treeFind (B a t left right) | s < a = treeFind left
| s > a = treeFind right | s > a = treeFind right
| s == a = t | s == a = t
resWords = b "def" 39 (b "=>" 20 (b "++" 10 (b "(" 5 (b "$" 3 (b "#" 2 (b "!" 1 N N) N) (b "%" 4 N N)) (b "**" 8 (b "*" 7 (b ")" 6 N N) N) (b "+" 9 N N))) (b "/" 15 (b "->" 13 (b "-" 12 (b "," 11 N N) N) (b "." 14 N N)) (b "<" 18 (b ";" 17 (b ":" 16 N N) N) (b "=" 19 N N)))) (b "[" 30 (b "PType" 25 (b "@" 23 (b "?" 22 (b ">" 21 N N) N) (b "Lin" 24 N N)) (b "Tok" 28 (b "Strs" 27 (b "Str" 26 N N) N) (b "Type" 29 N N))) (b "case" 35 (b "_" 33 (b "]" 32 (b "\\" 31 N N) N) (b "abstract" 34 N N)) (b "concrete" 37 (b "cat" 36 N N) (b "data" 38 N N))))) (b "package" 58 (b "let" 49 (b "in" 44 (b "fun" 42 (b "fn" 41 (b "flags" 40 N N) N) (b "grammar" 43 N N)) (b "instance" 47 (b "incomplete" 46 (b "include" 45 N N) N) (b "interface" 48 N N))) (b "of" 54 (b "lindef" 52 (b "lincat" 51 (b "lin" 50 N N) N) (b "lintype" 53 N N)) (b "oper" 56 (b "open" 55 N N) (b "out" 57 N N)))) (b "transfer" 68 (b "resource" 63 (b "pre" 61 (b "pattern" 60 (b "param" 59 N N) N) (b "printname" 62 N N)) (b "table" 66 (b "strs" 65 (b "reuse" 64 N N) N) (b "tokenizer" 67 N N))) (b "with" 73 (b "variants" 71 (b "var" 70 (b "union" 69 N N) N) (b "where" 72 N N)) (b "|" 75 (b "{" 74 N N) (b "}" 76 N N))))) resWords = b "def" 39 (b "=>" 20 (b "++" 10 (b "(" 5 (b "$" 3 (b "#" 2 (b "!" 1 N N) N) (b "%" 4 N N)) (b "**" 8 (b "*" 7 (b ")" 6 N N) N) (b "+" 9 N N))) (b "/" 15 (b "->" 13 (b "-" 12 (b "," 11 N N) N) (b "." 14 N N)) (b "<" 18 (b ";" 17 (b ":" 16 N N) N) (b "=" 19 N N)))) (b "[" 30 (b "PType" 25 (b "@" 23 (b "?" 22 (b ">" 21 N N) N) (b "Lin" 24 N N)) (b "Tok" 28 (b "Strs" 27 (b "Str" 26 N N) N) (b "Type" 29 N N))) (b "case" 35 (b "_" 33 (b "]" 32 (b "\\" 31 N N) N) (b "abstract" 34 N N)) (b "concrete" 37 (b "cat" 36 N N) (b "data" 38 N N))))) (b "package" 58 (b "let" 49 (b "in" 44 (b "fun" 42 (b "fn" 41 (b "flags" 40 N N) N) (b "grammar" 43 N N)) (b "instance" 47 (b "incomplete" 46 (b "include" 45 N N) N) (b "interface" 48 N N))) (b "of" 54 (b "lindef" 52 (b "lincat" 51 (b "lin" 50 N N) N) (b "lintype" 53 N N)) (b "oper" 56 (b "open" 55 N N) (b "out" 57 N N)))) (b "transfer" 68 (b "resource" 63 (b "pre" 61 (b "pattern" 60 (b "param" 59 N N) N) (b "printname" 62 N N)) (b "table" 66 (b "strs" 65 (b "reuse" 64 N N) N) (b "tokenizer" 67 N N))) (b "with" 73 (b "variants" 71 (b "var" 70 (b "union" 69 N N) N) (b "where" 72 N N)) (b "|" 75 (b "{" 74 N N) (b "}" 76 N N)))))
where b s n = let bs = BS.pack s where b s n = let bs = BS.pack s
in B bs (TS bs n) in B bs (TS bs n)
unescapeInitTail :: BS.ByteString -> BS.ByteString unescapeInitTail :: BS.ByteString -> BS.ByteString
unescapeInitTail = BS.pack . unesc . tail . BS.unpack where unescapeInitTail = BS.pack . unesc . tail . BS.unpack where
unesc s = case s of unesc s = case s of
'\\':c:cs | elem c ['\"', '\\', '\''] -> c : unesc cs '\\':c:cs | elem c ['\"', '\\', '\''] -> c : unesc cs
'\\':'n':cs -> '\n' : unesc cs '\\':'n':cs -> '\n' : unesc cs
'\\':'t':cs -> '\t' : unesc cs '\\':'t':cs -> '\t' : unesc cs
'"':[] -> [] '"':[] -> []
c:cs -> c : unesc cs c:cs -> c : unesc cs
_ -> [] _ -> []
------------------------------------------------------------------- -------------------------------------------------------------------
-- Alex wrapper code. -- Alex wrapper code.
-- A modified "posn" wrapper. -- A modified "posn" wrapper.
------------------------------------------------------------------- -------------------------------------------------------------------
data Posn = Pn !Int !Int !Int data Posn = Pn !Int !Int !Int
deriving (Eq, Show,Ord) deriving (Eq, Show,Ord)
alexStartPos :: Posn alexStartPos :: Posn
alexStartPos = Pn 0 1 1 alexStartPos = Pn 0 1 1
alexMove :: Posn -> Char -> Posn alexMove :: Posn -> Char -> Posn
alexMove (Pn a l c) '\t' = Pn (a+1) l (((c+7) `div` 8)*8+1) alexMove (Pn a l c) '\t' = Pn (a+1) l (((c+7) `div` 8)*8+1)
alexMove (Pn a l c) '\n' = Pn (a+1) (l+1) 1 alexMove (Pn a l c) '\n' = Pn (a+1) (l+1) 1
alexMove (Pn a l c) _ = Pn (a+1) l (c+1) alexMove (Pn a l c) _ = Pn (a+1) l (c+1)
type AlexInput = (Posn, -- current position, type AlexInput = (Posn, -- current position,
Char, -- previous char Char, -- previous char
BS.ByteString) -- current input string BS.ByteString) -- current input string
tokens :: BS.ByteString -> [Token] tokens :: BS.ByteString -> [Token]
tokens str = go (alexStartPos, '\n', str) tokens str = go (alexStartPos, '\n', str)
where where
go :: AlexInput -> [Token] go :: AlexInput -> [Token]
go inp@(pos, _, str) = go inp@(pos, _, str) =
case alexScan inp 0 of case alexScan inp 0 of
AlexEOF -> [] AlexEOF -> []
AlexError (pos, _, _) -> [Err pos] AlexError (pos, _, _) -> [Err pos]
AlexSkip inp' len -> go inp' AlexSkip inp' len -> go inp'
AlexToken inp' len act -> act pos (BS.take len str) : (go inp') AlexToken inp' len act -> act pos (BS.take len str) : (go inp')
alexGetChar :: AlexInput -> Maybe (Char,AlexInput) alexGetChar :: AlexInput -> Maybe (Char,AlexInput)
alexGetChar (p, _, s) = alexGetChar (p, _, s) =
case BS.uncons s of case BS.uncons s of
Nothing -> Nothing Nothing -> Nothing
Just (c,s) -> Just (c,s) ->
let p' = alexMove p c let p' = alexMove p c
in p' `seq` Just (c, (p', c, s)) in p' `seq` Just (c, (p', c, s))
alexInputPrevChar :: AlexInput -> Char alexInputPrevChar :: AlexInput -> Char
alexInputPrevChar (p, c, s) = c alexInputPrevChar (p, c, s) = c
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,20 +1,20 @@
module GF.Source.SharedString (shareString) where module GF.Source.SharedString (shareString) where
import Data.Map as M import Data.Map as M
import Data.IORef import Data.IORef
import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Char8 as BS
import System.IO.Unsafe (unsafePerformIO) import System.IO.Unsafe (unsafePerformIO)
{-# NOINLINE stringPoolRef #-} {-# NOINLINE stringPoolRef #-}
stringPoolRef :: IORef (M.Map BS.ByteString BS.ByteString) stringPoolRef :: IORef (M.Map BS.ByteString BS.ByteString)
stringPoolRef = unsafePerformIO $ newIORef M.empty stringPoolRef = unsafePerformIO $ newIORef M.empty
{-# NOINLINE shareString #-} {-# NOINLINE shareString #-}
shareString :: BS.ByteString -> BS.ByteString shareString :: BS.ByteString -> BS.ByteString
shareString s = unsafePerformIO $ do shareString s = unsafePerformIO $ do
stringPool <- readIORef stringPoolRef stringPool <- readIORef stringPoolRef
case M.lookup s stringPool of case M.lookup s stringPool of
Just s' -> return s' Just s' -> return s'
Nothing -> do let s' = BS.copy s Nothing -> do let s' = BS.copy s
writeIORef stringPoolRef $! M.insert s' s' stringPool writeIORef stringPoolRef $! M.insert s' s' stringPool
return s' return s'