Changeset 9
- Timestamp:
- 02/11/05 11:12:24 (4 years ago)
- svk:copy_cache_prev:
- 1041
- Files:
-
- 7 modified
-
AUTHORS (modified) (1 diff)
-
MANIFEST (modified) (1 diff)
-
Makefile.PL (modified) (3 diffs)
-
src/Eval.hs (modified) (2 diffs)
-
src/Lexer.hs (modified) (2 diffs)
-
src/Parser.hs (modified) (4 diffs)
-
src/Prim.hs (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
AUTHORS
r7 r9 11 11 Kang-Min Liu (GUGOD) 12 12 Larry Wall (LWALL) 13 Liang-Qi Xie 13 14 Luke Palmer (LPALMER) 14 15 Nicholas Clark (NWCLARK) -
MANIFEST
r7 r9 18 18 SIGNATURE Public-key signature (added by MakeMaker) 19 19 src/AST.hs 20 src/Bind.hs 20 21 src/Context.hs 21 22 src/Eval.hs -
Makefile.PL
r7 r9 3 3 use strict; 4 4 use FindBin; 5 use Config; 5 6 use inc::Module::Install; 6 7 … … 12 13 author ('Autrijus Tang <autrijus@autrijus.org>'); 13 14 license ('perl'); 14 install_script ( 'pugs');15 install_script ("pugs$Config{_exe}"); 15 16 build_requires ('Test::More'); 16 17 17 can_run('ghc') or die << '.';18 (`ghc --version` =~ /Glasgow/) or die << '.'; 18 19 *** Cannot find a runnable 'ghc' from path. 19 20 *** Please install GHC from http://haskell.org/ghc/. … … 66 67 67 68 postamble(<< "."); 68 pugs : @{[glob("src/*.hs")]}69 pugs$Config{_exe}: @{[glob("src/*.hs")]} 69 70 ghc --make -o pugs -O src/Main.hs -isrc 70 71 -
src/Eval.hs
r8 r9 165 165 = retVal $ VList $ concatMap (vCast . evaluate env{ cxt = "List" }) exps 166 166 | name `isInfix` "[]" 167 , [listExp, rangeExp]<- exps167 , (listExp:rangeExp:errs) <- exps 168 168 , list <- evaluate env{ cxt = "List" } listExp 169 169 , range <- evaluate env{ cxt = "List" } rangeExp 170 , slice <- unfoldr (doSlice $ vCast list) (map vCast $ vCast range)170 , slice <- unfoldr (doSlice errs $ vCast list) (map vCast $ vCast range) 171 171 = retVal $ VList slice 172 172 where 173 doSlice :: [Val] -> [VInt] -> Maybe (Val, [VInt]) 174 doSlice vs [] = Nothing 175 doSlice vs (n:ns) 176 | genericLength vs > n = Just ((vs `genericIndex` n), ns) 177 | otherwise = Nothing 173 doSlice :: [Exp] -> [Val] -> [VInt] -> Maybe (Val, [VInt]) 174 doSlice errs vs (n:ns) 175 | (v:_) <- n `genericDrop` vs 176 = Just (v, ns) 177 | ((Val err):_) <- errs 178 = Just (err, ns) 179 | otherwise 180 = Nothing 181 doSlice _ _ _ = Nothing 178 182 buildStatements exps 179 183 | ((Syn name' exps'):rest) <- exps … … 186 190 runStatement cxt (env, (Val val)) exp 187 191 | VError _ _ <- val 192 = (env, Val val) 193 | NonTerm _ <- exp 188 194 = (env, Val val) 189 195 | (fenv, exp) <- reduce env{ cxt = cxt } exp -
src/Lexer.hs
r8 r9 91 91 expo <- expo 92 92 if expo < 1 93 then return ( Left $ n * numeratorexpo)93 then return (Right $ (n % 1) * expo) 94 94 else return (Right $ (n % 1) * expo) 95 95 … … 112 112 <?> "exponent" 113 113 where 114 power e | e < 0 = 1 % (10^ e)114 power e | e < 0 = 1 % (10^abs(e)) 115 115 | otherwise = (10^e) % 1 116 116 -
src/Parser.hs
r8 r9 49 49 operators = concat $ 50 50 [ tightOperators 51 , [ list Ops" , " ] -- Comma51 , [ listSyn " , " ] -- Comma 52 52 , looseOperators 53 53 , [ listSyn " ; " ] -- Terminator … … 99 99 , parseApply 100 100 , parseParens parseOp 101 , parseEof 101 102 ] 102 103 <?> "term" 104 105 parseEof = do 106 eof 107 pos <- getPosition 108 return $ NonTerm pos 103 109 104 110 parseLitTerm = choice … … 144 150 145 151 parseParamList parse = do 146 formal <- maybeParens ((parse `sep By` symbol ",") `sepBy` symbol ":")152 formal <- maybeParens ((parse `sepEndBy` symbol ",") `sepEndBy` symbol ":") 147 153 case formal of 148 154 [] -> return [[], []] … … 224 230 225 231 arrayLiteral = do 226 items <- brackets $ parseOp `sepBy` symbol "," 227 return $ App "&prefix:\\" [] [(Parens $ foldl app (Val $ VList []) items)] 228 where 229 app :: Exp -> Exp -> Exp 230 app x y = App "&infix:," [] [x, y] 232 items <- brackets $ parseOp `sepEndBy` symbol "," 233 return $ App "&prefix:\\" [] [Syn "&infix:," items] 231 234 232 235 pairLiteral = do -
src/Prim.hs
r8 r9 62 62 op2 "~<<"= \x y -> VStr $ mapStr (`shiftL` vCast y) (vCast x) 63 63 op2 "~>>"= \x y -> VStr $ mapStr (`shiftR` vCast y) (vCast x) 64 op2 "**" = op2Rat ((^ ) :: VRat -> VInt -> VRat)64 op2 "**" = op2Rat ((^^) :: VRat -> VInt -> VRat) 65 65 op2 "+" = op2Numeric (+) 66 66 op2 "-" = op2Numeric (-)
