Skip to content
Snippets Groups Projects
Commit 1cbf18b2 authored by pm3g19's avatar pm3g19
Browse files

Solves problem 2

parent 7583ee9c
Branches
No related tags found
No related merge requests found
......@@ -19,7 +19,7 @@ eval env expr = let (eval', evalFull') = (eval env, evalFull env) in case expr o
Filter -> let (Set inputRecords,predicate) = (eval' $ head inputSets, eval' $ head args) in
Set $ filter ((==Boolean True).(\r -> eval' $ FuncCall predicate [] [r])) $ map eval' inputRecords
Map -> Set (map (\record -> FuncCall lambda [] [record]) records)
Map -> Set (map (\record -> eval' $ FuncCall lambda [] [record]) records)
where
(Set records:_) = inputSets
(lambda:_) = args
......@@ -31,12 +31,12 @@ eval env expr = let (eval', evalFull') = (eval env, evalFull env) in case expr o
Set $ [ x `concatRecord` y | x <- l1, y <- l2]
RecordIndex -> let (Record recordData:Int index:_) = (map eval' args) in
recordData !! index
recordData !! (index - 1)
RecordSelect -> Record filteredList
RecordSelect -> debug (show expr) $ Record filteredList
where
(Record recordData: indexes) = args
indexesRaw = map (\(Int i) -> i) indexes
(Record recordData: indexes) = map eval' args
indexesRaw = map (\(Int i) -> i - 1) indexes
filteredList = map (recordData!!) indexesRaw
......@@ -49,7 +49,7 @@ eval env expr = let (eval', evalFull') = (eval env, evalFull env) in case expr o
Contains -> case args of
(mainString:containsWhat:_) -> case (eval' mainString , eval' containsWhat) of
(String a, String b) -> a `beginsWith` b
(String a, String b) -> b `sublist` a
Plus -> let (e1:e2:_) = args in case (eval' e1, eval' e2) of
(String a, String b) -> String (a ++ b)
......@@ -87,4 +87,5 @@ evalFull = eval
--evalFull _ e = e
--TODO implement properly
concatRecord (Record r1) (Record r2) = Record (r1 ++ r2)
beginsWith = notImplemented
\ No newline at end of file
sublist = notImplemented
\ No newline at end of file
......@@ -16,7 +16,7 @@ main = do
args <- getArgs
case args of
(srcname:_) -> interpret srcname
_ -> interpret "solutions/pr1.cql"
_ -> interpret "solutions/pr2.cql"
interpret :: FilePath -> IO () -- the main function, takes in file name, prints out result
......@@ -47,7 +47,7 @@ showFinal :: Expr -> IO ()
showFinal = (print2DList.sort2DListLex.setTo2DList)
setTo2DList :: Expr -> [[String]]
setTo2DList (Set records) = map (map (\(String s) -> s).(\(Record list) -> list)) records
setTo2DList (Set records) = traceShow records $ map (map (\(String s) -> s).(\(Record list) -> list)) records
--------------------------------------------
......
......@@ -3,61 +3,113 @@ module Lexer where
import Data.List
}
%wrapper "basic"
%wrapper "posn"
$digit = 0-9
$posDigit = 1-9
$alpha = [a-zA-Z]
$lower = [a-z]
$upper = [A-Z]
--\\map(\r -> r[1,2,3])
tokens :-
$white+ ;
filter {\s -> TokenFilter }
true {\s -> TokenTrue }
false {\s -> TokenFalse }
\.in {\s -> TokenInSet }
\.out {\s -> TokenOutSet }
\[ {\s -> TokenLeftSqBracket }
\] {\s -> TokenRightSqBracket }
"->" {\s -> TokenArrow }
"==" {\s -> TokenisEqual }
"/=" {\s -> TokenisNotEqual }
\( {\s -> TokenLeftBracket }
\) {\s -> TokenRightBracket }
\; {\s -> TokenSemiCol }
\\ {\s -> TokenLambda }
\, {\s -> TokenComma }
\. {\s -> TokenFullStop }
x {\s -> TokenXProduct }
$lower [$lower $digit \_ \']* {\s -> TokenVarName s }
$upper[$alpha]* {\s -> TokenSetName s }
$digit+ {\s -> TokenNat (read s) }
\"[$alpha $digit]+\" {\s -> ((TokenString).init.tail) s }
\#.* ;
contains {\p s -> TokenContains p }
isEmpty {\p s -> TokenIsEmpty p }
filter {\p s -> TokenFilter p }
true {\p s -> TokenTrue p }
false {\p s -> TokenFalse p }
\.in {\p s -> TokenInSet p }
\.out {\p s -> TokenOutSet p }
\[ {\p s -> TokenLeftSqBracket p }
\] {\p s -> TokenRightSqBracket p }
"->" {\p s -> TokenArrow p }
"==" {\p s -> TokenisEqual p }
"/=" {\p s -> TokenisNotEqual p }
"+" {\p s -> TokenPlus p }
\( {\p s -> TokenLeftBracket p }
\) {\p s -> TokenRightBracket p }
\: {\p s -> TokenCol p }
\; {\p s -> TokenSemiCol p }
\\ {\p s -> TokenLambda p }
\, {\p s -> TokenComma p }
\. {\p s -> TokenFullStop p }
x {\p s -> TokenXProduct p }
xx {\p s -> TokenXXProduct p }
map {\p s -> TokenMap p }
$lower [$lower $digit \_ \']* {\p s -> TokenVarName p s }
$upper[$alpha]* {\p s -> TokenSetName p s }
--$posDigit$digit* {\p s -> TokenPosNat p (read s) }
$digit+ {\p s -> TokenNat p (read s) }
\"[$alpha $digit]+\" {\p s -> TokenString p (init.tail $ s) }
{
--token type:
data Token =
TokenFilter |
TokenSetName String |
TokenFunc |
TokenNat Int |
TokenVarName String |
TokenTrue |
TokenFalse |
TokenString String |
TokenLeftSqBracket |
TokenRightSqBracket |
TokenArrow |
TokenisEqual |
TokenisNotEqual |
TokenLeftBracket |
TokenRightBracket |
TokenSemiCol |
TokenLambda |
TokenComma |
TokenFullStop |
TokenInSet |
TokenXProduct |
TokenOutSet
TokenFilter AlexPosn |
TokenIsEmpty AlexPosn |
TokenContains AlexPosn |
TokenSetName AlexPosn String |
TokenNat AlexPosn Int |
TokenPosNat AlexPosn Int |
TokenVarName AlexPosn String |
TokenTrue AlexPosn |
TokenFalse AlexPosn |
TokenString AlexPosn String |
TokenLeftSqBracket AlexPosn |
TokenRightSqBracket AlexPosn |
TokenArrow AlexPosn |
TokenisEqual AlexPosn |
TokenisNotEqual AlexPosn |
TokenPlus AlexPosn |
TokenLeftBracket AlexPosn |
TokenRightBracket AlexPosn |
TokenSemiCol AlexPosn |
TokenCol AlexPosn |
TokenLambda AlexPosn |
TokenComma AlexPosn |
TokenFullStop AlexPosn |
TokenInSet AlexPosn |
TokenXProduct AlexPosn |
TokenXXProduct AlexPosn |
TokenOutSet AlexPosn |
TokenMap AlexPosn
deriving (Eq, Show)
pos :: Token -> AlexPosn
pos token = case token of
(TokenFilter p ) -> p
(TokenIsEmpty p ) -> p
(TokenContains p ) -> p
(TokenSetName p _) -> p
(TokenNat p _) -> p
(TokenPosNat p _) -> p
(TokenVarName p _) -> p
(TokenTrue p ) -> p
(TokenFalse p ) -> p
(TokenString p _) -> p
(TokenLeftSqBracket p ) -> p
(TokenRightSqBracket p ) -> p
(TokenArrow p ) -> p
(TokenisEqual p ) -> p
(TokenisNotEqual p ) -> p
(TokenPlus p ) -> p
(TokenLeftBracket p ) -> p
(TokenRightBracket p ) -> p
(TokenSemiCol p ) -> p
(TokenCol p ) -> p
(TokenLambda p ) -> p
(TokenComma p ) -> p
(TokenFullStop p ) -> p
(TokenInSet p ) -> p
(TokenXProduct p ) -> p
(TokenXXProduct p ) -> p
(TokenOutSet p ) -> p
(TokenMap p) -> p
}
\ No newline at end of file
......@@ -2,6 +2,7 @@
module Parser where
import Lexer
import Types
import CSV
import qualified Data.Array as Happy_Data_Array
import qualified Data.Bits as Bits
import Control.Applicative(Applicative(..))
......@@ -9,7 +10,7 @@ import Control.Monad (ap)
-- parser produced by Happy Version 1.20.0
data HappyAbsSyn t4 t5 t6 t7 t8 t9 t10 t11 t12
data HappyAbsSyn t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17
= HappyTerminal (Token)
| HappyErrorToken Prelude.Int
| HappyAbsSyn4 t4
......@@ -21,375 +22,614 @@ data HappyAbsSyn t4 t5 t6 t7 t8 t9 t10 t11 t12
| HappyAbsSyn10 t10
| HappyAbsSyn11 t11
| HappyAbsSyn12 t12
| HappyAbsSyn13 t13
| HappyAbsSyn14 t14
| HappyAbsSyn15 t15
| HappyAbsSyn16 t16
| HappyAbsSyn17 t17
happyExpList :: Happy_Data_Array.Array Prelude.Int Prelude.Int
happyExpList = Happy_Data_Array.listArray (0,75) ([8192,0,16384,0,0,2,0,0,0,4,0,0,8,32,0,8,0,0,0,0,32,32768,0,0,0,2048,0,512,0,0,0,0,32,0,1024,0,16384,0,8192,0,8192,0,32,0,0,0,0,2,0,32,512,0,0,1,63488,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,248,0,2304,2,1024,0,32,0,3968,0,0,0,16384,0,0,0,63488,0,0,0,0,0,0
happyExpList = Happy_Data_Array.listArray (0,118) ([0,4,0,0,1,0,0,1,0,0,0,0,0,0,0,512,2048,0,0,128,0,128,0,0,18,512,0,4,0,0,0,0,0,0,0,0,1024,0,0,66,0,0,4096,0,0,4,0,0,0,0,0,4,0,1,0,16384,0,0,0,4096,0,1152,32768,0,0,0,0,0,8,0,0,1,0,1024,0,0,0,0,0,2048,0,0,0,0,0,64,0,2048,0,0,0,0,0,0,2,0,0,8,0,0,1,0,2048,0,32768,0,0,0,8,0,63488,32768,1,0,0,0,0,0,0,4608,0,0,4096,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,992,1536,0,0,0,0,0,0,0,8264,0,0,4,0,63488,32768,1,128,0,0,3968,6144,0,0,0,0,256,2,0,2048,0,0,0,0,57344,3,6,0,0,0,0,0,0,0,0,0,8,0,0,256,0,0,32768,0,8192,0,0,0,0,0,0,0,0,0
])
{-# NOINLINE happyExpListPerState #-}
happyExpListPerState st =
token_strs_expected
where token_strs = ["error","%dummy","%start_parseSource","Prog","SetNames","VarNames","SetFuncCalls","SetFuncCall","Func","Expr","Record","Exprs","filter","in","out","SetName","Nat","VarName","true","false","Str","'['","']'","\"->\"","\"==\"","\"/=\"","'('","')'","';'","'\\\\'","','","'.'","%eof"]
bit_start = st Prelude.* 33
bit_end = (st Prelude.+ 1) Prelude.* 33
where token_strs = ["error","%dummy","%start_parseSource","Prog","SetDecl","SetDecls","SetNames","VarNames","SetFuncCalls","SetFuncCall","Func","Expr","Function","PredefFunc","Record","Exprs","Nats","filter","in","out","SetName","Nat","PosNat","VarName","true","false","Str","'['","']'","\"->\"","\"==\"","\"/=\"","'('","')'","';'","':'","'\\\\'","','","'.'","'+'","x","map","xx","contains","isEmpty","%eof"]
bit_start = st Prelude.* 46
bit_end = (st Prelude.+ 1) Prelude.* 46
read_bit = readArrayBit happyExpList
bits = Prelude.map read_bit [bit_start..bit_end Prelude.- 1]
bits_indexed = Prelude.zip bits [0..32]
bits_indexed = Prelude.zip bits [0..45]
token_strs_expected = Prelude.concatMap f bits_indexed
f (Prelude.False, _) = []
f (Prelude.True, nr) = [token_strs Prelude.!! nr]
action_0 (14) = happyShift action_2
action_0 (19) = happyShift action_2
action_0 (4) = happyGoto action_3
action_0 _ = happyFail (happyExpListPerState 0)
action_1 (14) = happyShift action_2
action_1 (19) = happyShift action_2
action_1 _ = happyFail (happyExpListPerState 1)
action_2 (16) = happyShift action_5
action_2 (21) = happyShift action_6
action_2 (5) = happyGoto action_4
action_2 (6) = happyGoto action_5
action_2 _ = happyFail (happyExpListPerState 2)
action_3 (33) = happyAccept
action_3 (46) = happyAccept
action_3 _ = happyFail (happyExpListPerState 3)
action_4 (15) = happyShift action_7
action_4 _ = happyFail (happyExpListPerState 4)
action_4 _ = happyReduce_3
action_5 (31) = happyShift action_6
action_5 _ = happyReduce_2
action_5 (20) = happyShift action_8
action_5 (38) = happyShift action_9
action_5 _ = happyFail (happyExpListPerState 5)
action_6 (16) = happyShift action_5
action_6 (5) = happyGoto action_11
action_6 (36) = happyShift action_7
action_6 _ = happyFail (happyExpListPerState 6)
action_7 (13) = happyShift action_10
action_7 (7) = happyGoto action_8
action_7 (8) = happyGoto action_9
action_7 (22) = happyShift action_16
action_7 _ = happyFail (happyExpListPerState 7)
action_8 _ = happyReduce_1
action_8 (18) = happyShift action_13
action_8 (21) = happyShift action_14
action_8 (42) = happyShift action_15
action_8 (9) = happyGoto action_11
action_8 (10) = happyGoto action_12
action_8 _ = happyFail (happyExpListPerState 8)
action_9 (29) = happyShift action_13
action_9 _ = happyReduce_6
action_9 (21) = happyShift action_6
action_9 (5) = happyGoto action_10
action_9 _ = happyFail (happyExpListPerState 9)
action_10 (22) = happyShift action_12
action_10 _ = happyFail (happyExpListPerState 10)
action_10 _ = happyReduce_4
action_11 _ = happyReduce_3
action_11 _ = happyReduce_1
action_12 (16) = happyShift action_15
action_12 (35) = happyShift action_21
action_12 _ = happyFail (happyExpListPerState 12)
action_13 (13) = happyShift action_10
action_13 (7) = happyGoto action_14
action_13 (8) = happyGoto action_9
action_13 (28) = happyShift action_19
action_13 (33) = happyShift action_20
action_13 _ = happyFail (happyExpListPerState 13)
action_14 _ = happyReduce_7
action_14 (41) = happyShift action_18
action_14 _ = happyFail (happyExpListPerState 14)
action_15 (23) = happyShift action_16
action_15 (33) = happyShift action_17
action_15 _ = happyFail (happyExpListPerState 15)
action_16 (27) = happyShift action_17
action_16 _ = happyFail (happyExpListPerState 16)
action_16 _ = happyReduce_2
action_17 (30) = happyShift action_19
action_17 (9) = happyGoto action_18
action_17 (37) = happyShift action_24
action_17 (11) = happyGoto action_27
action_17 _ = happyFail (happyExpListPerState 17)
action_18 (28) = happyShift action_21
action_18 (21) = happyShift action_26
action_18 _ = happyFail (happyExpListPerState 18)
action_19 (27) = happyShift action_20
action_19 (21) = happyShift action_25
action_19 _ = happyFail (happyExpListPerState 19)
action_20 (18) = happyShift action_23
action_20 (6) = happyGoto action_22
action_20 (37) = happyShift action_24
action_20 (11) = happyGoto action_23
action_20 _ = happyFail (happyExpListPerState 20)
action_21 _ = happyReduce_8
action_21 (18) = happyShift action_13
action_21 (21) = happyShift action_14
action_21 (42) = happyShift action_15
action_21 (9) = happyGoto action_22
action_21 (10) = happyGoto action_12
action_21 _ = happyReduce_9
action_22 (28) = happyShift action_25
action_22 _ = happyFail (happyExpListPerState 22)
action_22 _ = happyReduce_10
action_23 (31) = happyShift action_24
action_23 _ = happyReduce_4
action_23 (34) = happyShift action_31
action_23 _ = happyFail (happyExpListPerState 23)
action_24 (18) = happyShift action_23
action_24 (6) = happyGoto action_27
action_24 (33) = happyShift action_30
action_24 _ = happyFail (happyExpListPerState 24)
action_25 (24) = happyShift action_26
action_25 (29) = happyShift action_29
action_25 _ = happyFail (happyExpListPerState 25)
action_26 (18) = happyShift action_30
action_26 (19) = happyShift action_31
action_26 (20) = happyShift action_32
action_26 (21) = happyShift action_33
action_26 (22) = happyShift action_34
action_26 (10) = happyGoto action_28
action_26 (11) = happyGoto action_29
action_26 _ = happyFail (happyExpListPerState 26)
action_26 _ = happyReduce_14
action_27 _ = happyReduce_5
action_27 (34) = happyShift action_28
action_27 _ = happyFail (happyExpListPerState 27)
action_28 (22) = happyShift action_37
action_28 (25) = happyShift action_38
action_28 _ = happyReduce_9
action_28 _ = happyReduce_13
action_29 _ = happyReduce_14
action_29 (33) = happyShift action_34
action_29 _ = happyFail (happyExpListPerState 29)
action_30 _ = happyReduce_13
action_30 (24) = happyShift action_33
action_30 (8) = happyGoto action_32
action_30 _ = happyFail (happyExpListPerState 30)
action_31 _ = happyReduce_15
action_31 _ = happyReduce_12
action_32 _ = happyReduce_16
action_32 (34) = happyShift action_37
action_32 _ = happyFail (happyExpListPerState 32)
action_33 _ = happyReduce_12
action_33 (38) = happyShift action_36
action_33 _ = happyReduce_7
action_34 (18) = happyShift action_30
action_34 (19) = happyShift action_31
action_34 (20) = happyShift action_32
action_34 (21) = happyShift action_33
action_34 (22) = happyShift action_34
action_34 (10) = happyGoto action_35
action_34 (11) = happyGoto action_29
action_34 (12) = happyGoto action_36
action_34 (37) = happyShift action_24
action_34 (11) = happyGoto action_35
action_34 _ = happyFail (happyExpListPerState 34)
action_35 (22) = happyShift action_37
action_35 (25) = happyShift action_38
action_35 (31) = happyShift action_42
action_35 _ = happyReduce_18
action_35 (34) = happyShift action_40
action_35 _ = happyFail (happyExpListPerState 35)
action_36 (23) = happyShift action_41
action_36 (24) = happyShift action_33
action_36 (8) = happyGoto action_39
action_36 _ = happyFail (happyExpListPerState 36)
action_37 (17) = happyShift action_40
action_37 (30) = happyShift action_38
action_37 _ = happyFail (happyExpListPerState 37)
action_38 (18) = happyShift action_30
action_38 (19) = happyShift action_31
action_38 (20) = happyShift action_32
action_38 (21) = happyShift action_33
action_38 (22) = happyShift action_34
action_38 (10) = happyGoto action_39
action_38 (11) = happyGoto action_29
action_38 (24) = happyShift action_45
action_38 (25) = happyShift action_46
action_38 (26) = happyShift action_47
action_38 (27) = happyShift action_48
action_38 (28) = happyShift action_49
action_38 (44) = happyShift action_50
action_38 (45) = happyShift action_51
action_38 (12) = happyGoto action_41
action_38 (13) = happyGoto action_42
action_38 (14) = happyGoto action_43
action_38 (15) = happyGoto action_44
action_38 _ = happyFail (happyExpListPerState 38)
action_39 (22) = happyShift action_37
action_39 _ = happyReduce_10
action_39 _ = happyReduce_8
action_40 (23) = happyShift action_44
action_40 _ = happyFail (happyExpListPerState 40)
action_40 _ = happyReduce_11
action_41 _ = happyReduce_17
action_41 (28) = happyShift action_55
action_41 (31) = happyShift action_56
action_41 _ = happyReduce_15
action_42 (18) = happyShift action_30
action_42 (19) = happyShift action_31
action_42 (20) = happyShift action_32
action_42 (21) = happyShift action_33
action_42 (22) = happyShift action_34
action_42 (10) = happyGoto action_35
action_42 (11) = happyGoto action_29
action_42 (12) = happyGoto action_43
action_42 (33) = happyShift action_54
action_42 _ = happyFail (happyExpListPerState 42)
action_43 _ = happyReduce_19
action_44 _ = happyReduce_11
action_43 _ = happyReduce_25
action_44 _ = happyReduce_22
action_45 (33) = happyReduce_26
action_45 _ = happyReduce_21
action_46 _ = happyReduce_23
action_47 _ = happyReduce_24
action_48 _ = happyReduce_20
action_49 (24) = happyShift action_45
action_49 (25) = happyShift action_46
action_49 (26) = happyShift action_47
action_49 (27) = happyShift action_48
action_49 (28) = happyShift action_49
action_49 (44) = happyShift action_50
action_49 (45) = happyShift action_51
action_49 (12) = happyGoto action_52
action_49 (13) = happyGoto action_42
action_49 (14) = happyGoto action_43
action_49 (15) = happyGoto action_44
action_49 (16) = happyGoto action_53
action_49 _ = happyFail (happyExpListPerState 49)
action_50 _ = happyReduce_28
action_51 _ = happyReduce_27
action_52 (28) = happyShift action_55
action_52 (31) = happyShift action_56
action_52 (38) = happyShift action_61
action_52 _ = happyReduce_30
action_53 (29) = happyShift action_60
action_53 _ = happyFail (happyExpListPerState 53)
action_54 (24) = happyShift action_45
action_54 (25) = happyShift action_46
action_54 (26) = happyShift action_47
action_54 (27) = happyShift action_48
action_54 (28) = happyShift action_49
action_54 (44) = happyShift action_50
action_54 (45) = happyShift action_51
action_54 (12) = happyGoto action_52
action_54 (13) = happyGoto action_42
action_54 (14) = happyGoto action_43
action_54 (15) = happyGoto action_44
action_54 (16) = happyGoto action_59
action_54 _ = happyFail (happyExpListPerState 54)
action_55 (22) = happyShift action_58
action_55 _ = happyFail (happyExpListPerState 55)
action_56 (24) = happyShift action_45
action_56 (25) = happyShift action_46
action_56 (26) = happyShift action_47
action_56 (27) = happyShift action_48
action_56 (28) = happyShift action_49
action_56 (44) = happyShift action_50
action_56 (45) = happyShift action_51
action_56 (12) = happyGoto action_57
action_56 (13) = happyGoto action_42
action_56 (14) = happyGoto action_43
action_56 (15) = happyGoto action_44
action_56 _ = happyFail (happyExpListPerState 56)
action_57 (28) = happyShift action_55
action_57 _ = happyReduce_16
action_58 (29) = happyShift action_64
action_58 (38) = happyShift action_65
action_58 _ = happyFail (happyExpListPerState 58)
action_59 (34) = happyShift action_63
action_59 _ = happyFail (happyExpListPerState 59)
action_60 _ = happyReduce_29
action_61 (24) = happyShift action_45
action_61 (25) = happyShift action_46
action_61 (26) = happyShift action_47
action_61 (27) = happyShift action_48
action_61 (28) = happyShift action_49
action_61 (44) = happyShift action_50
action_61 (45) = happyShift action_51
action_61 (12) = happyGoto action_52
action_61 (13) = happyGoto action_42
action_61 (14) = happyGoto action_43
action_61 (15) = happyGoto action_44
action_61 (16) = happyGoto action_62
action_61 _ = happyFail (happyExpListPerState 61)
action_62 _ = happyReduce_31
action_63 _ = happyReduce_19
action_64 _ = happyReduce_17
action_65 (22) = happyShift action_67
action_65 (17) = happyGoto action_66
action_65 _ = happyFail (happyExpListPerState 65)
action_66 (29) = happyShift action_69
action_66 _ = happyFail (happyExpListPerState 66)
action_67 (38) = happyShift action_68
action_67 _ = happyReduce_32
action_68 (22) = happyShift action_67
action_68 (17) = happyGoto action_70
action_68 _ = happyFail (happyExpListPerState 68)
action_69 _ = happyReduce_18
action_70 _ = happyReduce_33
happyReduce_1 = happyReduce 4 4 happyReduction_1
happyReduction_1 ((HappyAbsSyn7 happy_var_4) `HappyStk`
happyReduction_1 ((HappyAbsSyn9 happy_var_4) `HappyStk`
_ `HappyStk`
(HappyAbsSyn5 happy_var_2) `HappyStk`
(HappyAbsSyn6 happy_var_2) `HappyStk`
_ `HappyStk`
happyRest)
= HappyAbsSyn4
((happy_var_2,happy_var_4)
) `HappyStk` happyRest
happyReduce_2 = happySpecReduce_1 5 happyReduction_2
happyReduction_2 (HappyTerminal (TokenSetName happy_var_1))
happyReduce_2 = happySpecReduce_3 5 happyReduction_2
happyReduction_2 _
_
(HappyTerminal (TokenSetName _ happy_var_1))
= HappyAbsSyn5
(happy_var_1
)
happyReduction_2 _ _ _ = notHappyAtAll
happyReduce_3 = happySpecReduce_1 6 happyReduction_3
happyReduction_3 (HappyAbsSyn5 happy_var_1)
= HappyAbsSyn6
([happy_var_1]
)
happyReduction_2 _ = notHappyAtAll
happyReduction_3 _ = notHappyAtAll
happyReduce_3 = happySpecReduce_3 5 happyReduction_3
happyReduction_3 (HappyAbsSyn5 happy_var_3)
happyReduce_4 = happySpecReduce_3 6 happyReduction_4
happyReduction_4 (HappyAbsSyn5 happy_var_3)
_
(HappyTerminal (TokenSetName happy_var_1))
= HappyAbsSyn5
(HappyAbsSyn6 happy_var_1)
= HappyAbsSyn6
(happy_var_3:happy_var_1
)
happyReduction_4 _ _ _ = notHappyAtAll
happyReduce_5 = happySpecReduce_1 7 happyReduction_5
happyReduction_5 (HappyTerminal (TokenSetName _ happy_var_1))
= HappyAbsSyn7
([happy_var_1]
)
happyReduction_5 _ = notHappyAtAll
happyReduce_6 = happySpecReduce_3 7 happyReduction_6
happyReduction_6 (HappyAbsSyn7 happy_var_3)
_
(HappyTerminal (TokenSetName _ happy_var_1))
= HappyAbsSyn7
(happy_var_1:happy_var_3
)
happyReduction_3 _ _ _ = notHappyAtAll
happyReduction_6 _ _ _ = notHappyAtAll
happyReduce_4 = happySpecReduce_1 6 happyReduction_4
happyReduction_4 (HappyTerminal (TokenVarName happy_var_1))
= HappyAbsSyn6
happyReduce_7 = happySpecReduce_1 8 happyReduction_7
happyReduction_7 (HappyTerminal (TokenVarName _ happy_var_1))
= HappyAbsSyn8
([happy_var_1]
)
happyReduction_4 _ = notHappyAtAll
happyReduction_7 _ = notHappyAtAll
happyReduce_5 = happySpecReduce_3 6 happyReduction_5
happyReduction_5 (HappyAbsSyn6 happy_var_3)
happyReduce_8 = happySpecReduce_3 8 happyReduction_8
happyReduction_8 (HappyAbsSyn8 happy_var_3)
_
(HappyTerminal (TokenVarName happy_var_1))
= HappyAbsSyn6
(HappyTerminal (TokenVarName _ happy_var_1))
= HappyAbsSyn8
(happy_var_1:happy_var_3
)
happyReduction_5 _ _ _ = notHappyAtAll
happyReduction_8 _ _ _ = notHappyAtAll
happyReduce_6 = happySpecReduce_1 7 happyReduction_6
happyReduction_6 (HappyAbsSyn8 happy_var_1)
= HappyAbsSyn7
happyReduce_9 = happySpecReduce_2 9 happyReduction_9
happyReduction_9 _
(HappyAbsSyn10 happy_var_1)
= HappyAbsSyn9
([happy_var_1]
)
happyReduction_6 _ = notHappyAtAll
happyReduction_9 _ _ = notHappyAtAll
happyReduce_7 = happySpecReduce_3 7 happyReduction_7
happyReduction_7 (HappyAbsSyn7 happy_var_3)
happyReduce_10 = happySpecReduce_3 9 happyReduction_10
happyReduction_10 (HappyAbsSyn9 happy_var_3)
_
(HappyAbsSyn8 happy_var_1)
= HappyAbsSyn7
(HappyAbsSyn10 happy_var_1)
= HappyAbsSyn9
(happy_var_1:happy_var_3
)
happyReduction_7 _ _ _ = notHappyAtAll
happyReduction_10 _ _ _ = notHappyAtAll
happyReduce_8 = happyReduce 7 8 happyReduction_8
happyReduction_8 (_ `HappyStk`
(HappyAbsSyn9 happy_var_6) `HappyStk`
happyReduce_11 = happyReduce 7 10 happyReduction_11
happyReduction_11 (_ `HappyStk`
(HappyAbsSyn11 happy_var_6) `HappyStk`
_ `HappyStk`
_ `HappyStk`
(HappyTerminal (TokenSetName happy_var_3)) `HappyStk`
(HappyTerminal (TokenSetName _ happy_var_3)) `HappyStk`
_ `HappyStk`
_ `HappyStk`
happyRest)
= HappyAbsSyn8
= HappyAbsSyn10
(FuncCall (PredefFunc Filter) [Var happy_var_3] [happy_var_6]
) `HappyStk` happyRest
happyReduce_9 = happyReduce 6 9 happyReduction_9
happyReduction_9 ((HappyAbsSyn10 happy_var_6) `HappyStk`
happyReduce_12 = happyReduce 4 10 happyReduction_12
happyReduction_12 (_ `HappyStk`
(HappyAbsSyn11 happy_var_3) `HappyStk`
_ `HappyStk`
_ `HappyStk`
(HappyAbsSyn6 happy_var_3) `HappyStk`
happyRest)
= HappyAbsSyn10
(FuncCall (PredefFunc Filter) [] [happy_var_3]
) `HappyStk` happyRest
happyReduce_13 = happyReduce 4 10 happyReduction_13
happyReduction_13 (_ `HappyStk`
(HappyAbsSyn11 happy_var_3) `HappyStk`
_ `HappyStk`
_ `HappyStk`
happyRest)
= HappyAbsSyn9
(FuncDef [] happy_var_3 happy_var_6
= HappyAbsSyn10
(FuncCall (PredefFunc Map) [] [happy_var_3]
) `HappyStk` happyRest
happyReduce_10 = happySpecReduce_3 10 happyReduction_10
happyReduction_10 (HappyAbsSyn10 happy_var_3)
happyReduce_14 = happySpecReduce_3 10 happyReduction_14
happyReduction_14 (HappyTerminal (TokenSetName _ happy_var_3))
_
(HappyAbsSyn10 happy_var_1)
(HappyTerminal (TokenSetName _ happy_var_1))
= HappyAbsSyn10
(FuncCall (PredefFunc XProduct) (map Var [happy_var_1, happy_var_3]) []
)
happyReduction_14 _ _ _ = notHappyAtAll
happyReduce_15 = happyReduce 6 11 happyReduction_15
happyReduction_15 ((HappyAbsSyn12 happy_var_6) `HappyStk`
_ `HappyStk`
_ `HappyStk`
(HappyAbsSyn8 happy_var_3) `HappyStk`
_ `HappyStk`
_ `HappyStk`
happyRest)
= HappyAbsSyn11
(FuncDef [] happy_var_3 happy_var_6
) `HappyStk` happyRest
happyReduce_16 = happySpecReduce_3 12 happyReduction_16
happyReduction_16 (HappyAbsSyn12 happy_var_3)
_
(HappyAbsSyn12 happy_var_1)
= HappyAbsSyn12
(FuncCall (PredefFunc IsEqual) [] [happy_var_1, happy_var_3]
)
happyReduction_10 _ _ _ = notHappyAtAll
happyReduction_16 _ _ _ = notHappyAtAll
happyReduce_11 = happyReduce 4 10 happyReduction_11
happyReduction_11 (_ `HappyStk`
(HappyTerminal (TokenNat happy_var_3)) `HappyStk`
happyReduce_17 = happyReduce 4 12 happyReduction_17
happyReduction_17 (_ `HappyStk`
(HappyTerminal (TokenNat _ happy_var_3)) `HappyStk`
_ `HappyStk`
(HappyAbsSyn10 happy_var_1) `HappyStk`
(HappyAbsSyn12 happy_var_1) `HappyStk`
happyRest)
= HappyAbsSyn10
= HappyAbsSyn12
(FuncCall (PredefFunc RecordIndex) [] [happy_var_1, Types.Int happy_var_3]
) `HappyStk` happyRest
happyReduce_12 = happySpecReduce_1 10 happyReduction_12
happyReduction_12 (HappyTerminal (TokenString happy_var_1))
= HappyAbsSyn10
(Types.String happy_var_1
happyReduce_18 = happyReduce 6 12 happyReduction_18
happyReduction_18 (_ `HappyStk`
(HappyAbsSyn17 happy_var_5) `HappyStk`
_ `HappyStk`
(HappyTerminal (TokenNat _ happy_var_3)) `HappyStk`
_ `HappyStk`
(HappyAbsSyn12 happy_var_1) `HappyStk`
happyRest)
= HappyAbsSyn12
(FuncCall (PredefFunc RecordSelect) [] (happy_var_1:(map Types.Int (happy_var_3:happy_var_5)))
) `HappyStk` happyRest
happyReduce_19 = happyReduce 4 12 happyReduction_19
happyReduction_19 (_ `HappyStk`
(HappyAbsSyn16 happy_var_3) `HappyStk`
_ `HappyStk`
(HappyAbsSyn13 happy_var_1) `HappyStk`
happyRest)
= HappyAbsSyn12
(FuncCall happy_var_1 [] happy_var_3
) `HappyStk` happyRest
happyReduce_20 = happySpecReduce_1 12 happyReduction_20
happyReduction_20 (HappyTerminal (TokenString _ happy_var_1))
= HappyAbsSyn12
(Types.String $ stripWhitespace happy_var_1
)
happyReduction_12 _ = notHappyAtAll
happyReduction_20 _ = notHappyAtAll
happyReduce_13 = happySpecReduce_1 10 happyReduction_13
happyReduction_13 (HappyTerminal (TokenVarName happy_var_1))
= HappyAbsSyn10
happyReduce_21 = happySpecReduce_1 12 happyReduction_21
happyReduction_21 (HappyTerminal (TokenVarName _ happy_var_1))
= HappyAbsSyn12
(Var happy_var_1
)
happyReduction_13 _ = notHappyAtAll
happyReduction_21 _ = notHappyAtAll
happyReduce_14 = happySpecReduce_1 10 happyReduction_14
happyReduction_14 (HappyAbsSyn11 happy_var_1)
= HappyAbsSyn10
happyReduce_22 = happySpecReduce_1 12 happyReduction_22
happyReduction_22 (HappyAbsSyn15 happy_var_1)
= HappyAbsSyn12
(happy_var_1
)
happyReduction_14 _ = notHappyAtAll
happyReduction_22 _ = notHappyAtAll
happyReduce_15 = happySpecReduce_1 10 happyReduction_15
happyReduction_15 _
= HappyAbsSyn10
happyReduce_23 = happySpecReduce_1 12 happyReduction_23
happyReduction_23 _
= HappyAbsSyn12
(Boolean True
)
happyReduce_16 = happySpecReduce_1 10 happyReduction_16
happyReduction_16 _
= HappyAbsSyn10
happyReduce_24 = happySpecReduce_1 12 happyReduction_24
happyReduction_24 _
= HappyAbsSyn12
(Boolean False
)
happyReduce_17 = happySpecReduce_3 11 happyReduction_17
happyReduction_17 _
(HappyAbsSyn12 happy_var_2)
happyReduce_25 = happySpecReduce_1 13 happyReduction_25
happyReduction_25 (HappyAbsSyn14 happy_var_1)
= HappyAbsSyn13
(PredefFunc happy_var_1
)
happyReduction_25 _ = notHappyAtAll
happyReduce_26 = happySpecReduce_1 13 happyReduction_26
happyReduction_26 (HappyTerminal (TokenVarName _ happy_var_1))
= HappyAbsSyn13
(Var happy_var_1
)
happyReduction_26 _ = notHappyAtAll
happyReduce_27 = happySpecReduce_1 14 happyReduction_27
happyReduction_27 _
= HappyAbsSyn14
(IsEmpty
)
happyReduce_28 = happySpecReduce_1 14 happyReduction_28
happyReduction_28 _
= HappyAbsSyn14
(Contains
)
happyReduce_29 = happySpecReduce_3 15 happyReduction_29
happyReduction_29 _
(HappyAbsSyn16 happy_var_2)
_
= HappyAbsSyn11
= HappyAbsSyn15
(Record happy_var_2
)
happyReduction_17 _ _ _ = notHappyAtAll
happyReduction_29 _ _ _ = notHappyAtAll
happyReduce_18 = happySpecReduce_1 12 happyReduction_18
happyReduction_18 (HappyAbsSyn10 happy_var_1)
= HappyAbsSyn12
happyReduce_30 = happySpecReduce_1 16 happyReduction_30
happyReduction_30 (HappyAbsSyn12 happy_var_1)
= HappyAbsSyn16
([happy_var_1]
)
happyReduction_18 _ = notHappyAtAll
happyReduction_30 _ = notHappyAtAll
happyReduce_19 = happySpecReduce_3 12 happyReduction_19
happyReduction_19 (HappyAbsSyn12 happy_var_3)
happyReduce_31 = happySpecReduce_3 16 happyReduction_31
happyReduction_31 (HappyAbsSyn16 happy_var_3)
_
(HappyAbsSyn10 happy_var_1)
= HappyAbsSyn12
(HappyAbsSyn12 happy_var_1)
= HappyAbsSyn16
(happy_var_1:happy_var_3
)
happyReduction_31 _ _ _ = notHappyAtAll
happyReduce_32 = happySpecReduce_1 17 happyReduction_32
happyReduction_32 (HappyTerminal (TokenNat _ happy_var_1))
= HappyAbsSyn17
([happy_var_1]
)
happyReduction_32 _ = notHappyAtAll
happyReduce_33 = happySpecReduce_3 17 happyReduction_33
happyReduction_33 (HappyAbsSyn17 happy_var_3)
_
(HappyTerminal (TokenNat _ happy_var_1))
= HappyAbsSyn17
(happy_var_1:happy_var_3
)
happyReduction_19 _ _ _ = notHappyAtAll
happyReduction_33 _ _ _ = notHappyAtAll
happyNewToken action sts stk [] =
action 33 33 notHappyAtAll (HappyState action) sts stk []
action 46 46 notHappyAtAll (HappyState action) sts stk []
happyNewToken action sts stk (tk:tks) =
let cont i = action i i tk (HappyState action) sts stk tks in
case tk of {
TokenFilter -> cont 13;
TokenInSet -> cont 14;
TokenOutSet -> cont 15;
TokenSetName happy_dollar_dollar -> cont 16;
TokenNat happy_dollar_dollar -> cont 17;
TokenVarName happy_dollar_dollar -> cont 18;
TokenTrue -> cont 19;
TokenFalse -> cont 20;
TokenString happy_dollar_dollar -> cont 21;
TokenLeftSqBracket -> cont 22;
TokenRightSqBracket -> cont 23;
TokenArrow -> cont 24;
TokenisEqual -> cont 25;
TokenisNotEqual -> cont 26;
TokenLeftBracket -> cont 27;
TokenRightBracket -> cont 28;
TokenSemiCol -> cont 29;
TokenLambda -> cont 30;
TokenComma -> cont 31;
TokenFullStop -> cont 32;
TokenFilter _ -> cont 18;
TokenInSet _ -> cont 19;
TokenOutSet _ -> cont 20;
TokenSetName _ happy_dollar_dollar -> cont 21;
TokenNat _ happy_dollar_dollar -> cont 22;
TokenPosNat _ happy_dollar_dollar -> cont 23;
TokenVarName _ happy_dollar_dollar -> cont 24;
TokenTrue _ -> cont 25;
TokenFalse _ -> cont 26;
TokenString _ happy_dollar_dollar -> cont 27;
TokenLeftSqBracket _ -> cont 28;
TokenRightSqBracket _ -> cont 29;
TokenArrow _ -> cont 30;
TokenisEqual _ -> cont 31;
TokenisNotEqual _ -> cont 32;
TokenLeftBracket _ -> cont 33;
TokenRightBracket _ -> cont 34;
TokenSemiCol _ -> cont 35;
TokenCol _ -> cont 36;
TokenLambda _ -> cont 37;
TokenComma _ -> cont 38;
TokenFullStop _ -> cont 39;
TokenPlus _ -> cont 40;
TokenXProduct _ -> cont 41;
TokenMap _ -> cont 42;
TokenXXProduct _ -> cont 43;
TokenContains _ -> cont 44;
TokenIsEmpty _ -> cont 45;
_ -> happyError' ((tk:tks), [])
}
happyError_ explist 33 tk tks = happyError' (tks, explist)
happyError_ explist 46 tk tks = happyError' (tks, explist)
happyError_ explist _ tk tks = happyError' ((tk:tks), explist)
newtype HappyIdentity a = HappyIdentity a
......@@ -422,7 +662,10 @@ happySeq = happyDontSeq
parseError :: [Token] -> a
parseError _ = error "Parse error"
parseError tokens = error $ "Parse error: " ++ (show.pos.head) tokens
tokenPosn :: Token -> String
tokenPosn t = let (AlexPn _ line col) = pos t in (show line) ++ ':' : (show col)
{-# LINE 1 "templates/GenericTemplate.hs" #-}
-- $Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp $
......
......@@ -11,7 +11,7 @@ data PredefFunc = XProduct | XXProduct | IsEqual | IsNotEqual | Plus --operators
| Map | Filter
| RecordIndex -- [] operator
| RecordSelect
| IsEmpty | NotEmpty | Contains | IsSubString -- string functions
| IsEmpty | NotEmpty | Contains -- string functions
deriving (Show, Eq)
......
......@@ -2,4 +2,5 @@
A:3
.out
filter((r) -> isSubstring(r[1], r[2]));
\ No newline at end of file
filter( \(r) -> r[1] == r[2]);
map (\(r) -> r[3,1]);
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment