happy-dot-1.0.0.0: src/Language/Dot/Parser.hs
{-# OPTIONS_GHC -w #-}
module Language.Dot.Parser
(parse
, GraphType(..)
, Name(..)
, Stmt(..)
, Subgraph(..)
, Port(..)
, Compass(..)
) where
import HappyDot.Parser
import Language.Dot.Graph
import Data.Char
import Control.Monad.Trans.State
import qualified Debug.Trace as D
import qualified Data.Array as Happy_Data_Array
import qualified Data.Bits as Bits
import Control.Applicative(Applicative(..))
import Control.Monad (ap)
-- parser produced by Happy Version 1.19.12
data HappyAbsSyn t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27
= HappyTerminal (Token)
| HappyErrorToken Int
| HappyAbsSyn4 t4
| HappyAbsSyn5 t5
| HappyAbsSyn6 t6
| HappyAbsSyn7 t7
| HappyAbsSyn8 t8
| HappyAbsSyn9 t9
| HappyAbsSyn10 t10
| HappyAbsSyn11 t11
| HappyAbsSyn12 t12
| HappyAbsSyn13 t13
| HappyAbsSyn14 t14
| HappyAbsSyn15 t15
| HappyAbsSyn16 t16
| HappyAbsSyn17 t17
| HappyAbsSyn18 t18
| HappyAbsSyn19 t19
| HappyAbsSyn20 t20
| HappyAbsSyn21 t21
| HappyAbsSyn22 t22
| HappyAbsSyn23 t23
| HappyAbsSyn24 t24
| HappyAbsSyn25 t25
| HappyAbsSyn26 t26
| HappyAbsSyn27 t27
happyExpList :: Happy_Data_Array.Array Int Int
happyExpList = Happy_Data_Array.listArray (0,147) ([0,0,4,0,0,8,0,24576,0,0,0,0,0,0,0,0,0,96,8,0,0,0,0,0,0,0,8192,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57344,0,0,4,0,0,0,0,0,0,0,32768,1598,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,896,0,32768,16,0,0,0,0,0,384,0,0,0,0,0,0,0,0,0,0,0,16,0,0,32,0,0,0,0,0,0,0,0,0,0,0,192,16,0,0,0,0,8192,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,57344,4872,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,8,0,192,16,0,0,0,0,0,2,0,0,0,0,0,0,0,7168,513,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53248,0,0,0,0,0,0,0,0,128,0,0,0,0,0,1536,128,0,0,0,0,32768,0,0,12288,1024,0,0,0,0
])
{-# NOINLINE happyExpListPerState #-}
happyExpListPerState st =
token_strs_expected
where token_strs = ["error","%dummy","%start_dot","Graph","Strictness","GraphType","Name_empty","Name","Quoted_string","Quoted_sum","Stmt_list","Stmt_list_aux","Stmt_sep","Stmt","Attr_stmt","Attr_list","Attr_list_aux","A_list","Edge_stmt","EdgeRHS","Node_stmt","Node","Port","Subgraph","Xml","XmlList","XmlElement","graph","digraph","node","edge","subgraph","label","qlabel","strict","arrow","'='","'{'","'}'","'['","']'","':'","';'","','","'+'","xmlClose","xmlOpen","xmlProc","%eof"]
bit_start = st * 49
bit_end = (st + 1) * 49
read_bit = readArrayBit happyExpList
bits = map read_bit [bit_start..bit_end - 1]
bits_indexed = zip bits [0..48]
token_strs_expected = concatMap f bits_indexed
f (False, _) = []
f (True, nr) = [token_strs !! nr]
action_0 (35) = happyShift action_3
action_0 (4) = happyGoto action_4
action_0 (5) = happyGoto action_2
action_0 _ = happyReduce_3
action_1 (35) = happyShift action_3
action_1 (5) = happyGoto action_2
action_1 _ = happyFail (happyExpListPerState 1)
action_2 (28) = happyShift action_6
action_2 (29) = happyShift action_7
action_2 (6) = happyGoto action_5
action_2 _ = happyFail (happyExpListPerState 2)
action_3 _ = happyReduce_2
action_4 (49) = happyAccept
action_4 _ = happyFail (happyExpListPerState 4)
action_5 (33) = happyShift action_13
action_5 (34) = happyShift action_14
action_5 (47) = happyShift action_15
action_5 (7) = happyGoto action_8
action_5 (8) = happyGoto action_9
action_5 (9) = happyGoto action_10
action_5 (10) = happyGoto action_11
action_5 (25) = happyGoto action_12
action_5 _ = happyReduce_7
action_6 _ = happyReduce_4
action_7 _ = happyReduce_5
action_8 (38) = happyShift action_19
action_8 (11) = happyGoto action_18
action_8 _ = happyFail (happyExpListPerState 8)
action_9 _ = happyReduce_6
action_10 _ = happyReduce_9
action_11 (45) = happyShift action_17
action_11 _ = happyReduce_11
action_12 _ = happyReduce_10
action_13 _ = happyReduce_8
action_14 _ = happyReduce_12
action_15 (26) = happyGoto action_16
action_15 _ = happyReduce_50
action_16 (46) = happyShift action_23
action_16 (47) = happyShift action_24
action_16 (48) = happyShift action_25
action_16 (27) = happyGoto action_22
action_16 _ = happyFail (happyExpListPerState 16)
action_17 (34) = happyShift action_21
action_17 _ = happyFail (happyExpListPerState 17)
action_18 _ = happyReduce_1
action_19 (12) = happyGoto action_20
action_19 _ = happyReduce_16
action_20 (28) = happyShift action_35
action_20 (30) = happyShift action_36
action_20 (31) = happyShift action_37
action_20 (32) = happyShift action_38
action_20 (33) = happyShift action_13
action_20 (34) = happyShift action_14
action_20 (38) = happyShift action_19
action_20 (39) = happyShift action_39
action_20 (47) = happyShift action_15
action_20 (8) = happyGoto action_27
action_20 (9) = happyGoto action_10
action_20 (10) = happyGoto action_11
action_20 (11) = happyGoto action_28
action_20 (14) = happyGoto action_29
action_20 (15) = happyGoto action_30
action_20 (19) = happyGoto action_31
action_20 (21) = happyGoto action_32
action_20 (22) = happyGoto action_33
action_20 (24) = happyGoto action_34
action_20 (25) = happyGoto action_12
action_20 _ = happyFail (happyExpListPerState 20)
action_21 _ = happyReduce_13
action_22 _ = happyReduce_49
action_23 _ = happyReduce_48
action_24 (26) = happyGoto action_26
action_24 _ = happyReduce_50
action_25 _ = happyReduce_52
action_26 (46) = happyShift action_55
action_26 (47) = happyShift action_24
action_26 (48) = happyShift action_25
action_26 (27) = happyGoto action_22
action_26 _ = happyFail (happyExpListPerState 26)
action_27 (37) = happyShift action_53
action_27 (42) = happyShift action_54
action_27 (23) = happyGoto action_52
action_27 _ = happyReduce_42
action_28 _ = happyReduce_47
action_29 (43) = happyShift action_50
action_29 (44) = happyShift action_51
action_29 (13) = happyGoto action_49
action_29 _ = happyReduce_19
action_30 _ = happyReduce_20
action_31 _ = happyReduce_22
action_32 _ = happyReduce_21
action_33 (36) = happyShift action_46
action_33 (16) = happyGoto action_47
action_33 (17) = happyGoto action_42
action_33 (20) = happyGoto action_48
action_33 _ = happyReduce_30
action_34 (36) = happyShift action_46
action_34 (20) = happyGoto action_45
action_34 _ = happyReduce_24
action_35 (16) = happyGoto action_44
action_35 (17) = happyGoto action_42
action_35 _ = happyReduce_30
action_36 (16) = happyGoto action_43
action_36 (17) = happyGoto action_42
action_36 _ = happyReduce_30
action_37 (16) = happyGoto action_41
action_37 (17) = happyGoto action_42
action_37 _ = happyReduce_30
action_38 (33) = happyShift action_13
action_38 (34) = happyShift action_14
action_38 (47) = happyShift action_15
action_38 (7) = happyGoto action_40
action_38 (8) = happyGoto action_9
action_38 (9) = happyGoto action_10
action_38 (10) = happyGoto action_11
action_38 (25) = happyGoto action_12
action_38 _ = happyReduce_7
action_39 _ = happyReduce_14
action_40 (38) = happyShift action_19
action_40 (11) = happyGoto action_67
action_40 _ = happyFail (happyExpListPerState 40)
action_41 _ = happyReduce_26
action_42 (40) = happyShift action_66
action_42 _ = happyReduce_28
action_43 _ = happyReduce_25
action_44 _ = happyReduce_27
action_45 (36) = happyShift action_59
action_45 (16) = happyGoto action_65
action_45 (17) = happyGoto action_42
action_45 _ = happyReduce_30
action_46 (32) = happyShift action_38
action_46 (33) = happyShift action_13
action_46 (34) = happyShift action_14
action_46 (38) = happyShift action_19
action_46 (43) = happyShift action_63
action_46 (44) = happyShift action_64
action_46 (47) = happyShift action_15
action_46 (8) = happyGoto action_60
action_46 (9) = happyGoto action_10
action_46 (10) = happyGoto action_11
action_46 (11) = happyGoto action_28
action_46 (22) = happyGoto action_61
action_46 (24) = happyGoto action_62
action_46 (25) = happyGoto action_12
action_46 _ = happyFail (happyExpListPerState 46)
action_47 _ = happyReduce_41
action_48 (36) = happyShift action_59
action_48 (16) = happyGoto action_58
action_48 (17) = happyGoto action_42
action_48 _ = happyReduce_30
action_49 _ = happyReduce_15
action_50 _ = happyReduce_17
action_51 _ = happyReduce_18
action_52 _ = happyReduce_43
action_53 (33) = happyShift action_13
action_53 (34) = happyShift action_14
action_53 (47) = happyShift action_15
action_53 (8) = happyGoto action_57
action_53 (9) = happyGoto action_10
action_53 (10) = happyGoto action_11
action_53 (25) = happyGoto action_12
action_53 _ = happyFail (happyExpListPerState 53)
action_54 (33) = happyShift action_13
action_54 (34) = happyShift action_14
action_54 (47) = happyShift action_15
action_54 (8) = happyGoto action_56
action_54 (9) = happyGoto action_10
action_54 (10) = happyGoto action_11
action_54 (25) = happyGoto action_12
action_54 _ = happyFail (happyExpListPerState 54)
action_55 _ = happyReduce_51
action_56 (42) = happyShift action_71
action_56 _ = happyReduce_44
action_57 _ = happyReduce_23
action_58 _ = happyReduce_33
action_59 (32) = happyShift action_38
action_59 (33) = happyShift action_13
action_59 (34) = happyShift action_14
action_59 (38) = happyShift action_19
action_59 (47) = happyShift action_15
action_59 (8) = happyGoto action_60
action_59 (9) = happyGoto action_10
action_59 (10) = happyGoto action_11
action_59 (11) = happyGoto action_28
action_59 (22) = happyGoto action_69
action_59 (24) = happyGoto action_70
action_59 (25) = happyGoto action_12
action_59 _ = happyFail (happyExpListPerState 59)
action_60 (42) = happyShift action_54
action_60 (23) = happyGoto action_52
action_60 _ = happyReduce_42
action_61 _ = happyReduce_37
action_62 _ = happyReduce_38
action_63 _ = happyReduce_39
action_64 _ = happyReduce_40
action_65 _ = happyReduce_34
action_66 (18) = happyGoto action_68
action_66 _ = happyReduce_32
action_67 _ = happyReduce_46
action_68 (41) = happyShift action_74
action_68 (43) = happyShift action_50
action_68 (44) = happyShift action_51
action_68 (13) = happyGoto action_73
action_68 _ = happyReduce_19
action_69 _ = happyReduce_35
action_70 _ = happyReduce_36
action_71 (33) = happyShift action_72
action_71 _ = happyFail (happyExpListPerState 71)
action_72 _ = happyReduce_45
action_73 (33) = happyShift action_13
action_73 (34) = happyShift action_14
action_73 (47) = happyShift action_15
action_73 (8) = happyGoto action_75
action_73 (9) = happyGoto action_10
action_73 (10) = happyGoto action_11
action_73 (25) = happyGoto action_12
action_73 _ = happyFail (happyExpListPerState 73)
action_74 _ = happyReduce_29
action_75 (37) = happyShift action_76
action_75 _ = happyFail (happyExpListPerState 75)
action_76 (33) = happyShift action_13
action_76 (34) = happyShift action_14
action_76 (47) = happyShift action_15
action_76 (8) = happyGoto action_77
action_76 (9) = happyGoto action_10
action_76 (10) = happyGoto action_11
action_76 (25) = happyGoto action_12
action_76 _ = happyFail (happyExpListPerState 76)
action_77 _ = happyReduce_31
happyReduce_1 = happyReduce 4 4 happyReduction_1
happyReduction_1 ((HappyAbsSyn11 happy_var_4) `HappyStk`
(HappyAbsSyn7 happy_var_3) `HappyStk`
(HappyAbsSyn6 happy_var_2) `HappyStk`
(HappyAbsSyn5 happy_var_1) `HappyStk`
happyRest)
= HappyAbsSyn4
((happy_var_1, happy_var_2, happy_var_3, happy_var_4)
) `HappyStk` happyRest
happyReduce_2 = happySpecReduce_1 5 happyReduction_2
happyReduction_2 _
= HappyAbsSyn5
(True
)
happyReduce_3 = happySpecReduce_0 5 happyReduction_3
happyReduction_3 = HappyAbsSyn5
(False
)
happyReduce_4 = happySpecReduce_1 6 happyReduction_4
happyReduction_4 _
= HappyAbsSyn6
(Graph
)
happyReduce_5 = happySpecReduce_1 6 happyReduction_5
happyReduction_5 _
= HappyAbsSyn6
(Digraph
)
happyReduce_6 = happySpecReduce_1 7 happyReduction_6
happyReduction_6 (HappyAbsSyn8 happy_var_1)
= HappyAbsSyn7
(happy_var_1
)
happyReduction_6 _ = notHappyAtAll
happyReduce_7 = happySpecReduce_0 7 happyReduction_7
happyReduction_7 = HappyAbsSyn7
(StringID ""
)
happyReduce_8 = happySpecReduce_1 8 happyReduction_8
happyReduction_8 (HappyTerminal (TokenLabel happy_var_1))
= HappyAbsSyn8
(StringID happy_var_1
)
happyReduction_8 _ = notHappyAtAll
happyReduce_9 = happySpecReduce_1 8 happyReduction_9
happyReduction_9 (HappyAbsSyn9 happy_var_1)
= HappyAbsSyn8
(StringID happy_var_1
)
happyReduction_9 _ = notHappyAtAll
happyReduce_10 = happySpecReduce_1 8 happyReduction_10
happyReduction_10 (HappyAbsSyn25 happy_var_1)
= HappyAbsSyn8
(XMLID happy_var_1
)
happyReduction_10 _ = notHappyAtAll
happyReduce_11 = happySpecReduce_1 9 happyReduction_11
happyReduction_11 (HappyAbsSyn10 happy_var_1)
= HappyAbsSyn9
(concat $ reverse happy_var_1
)
happyReduction_11 _ = notHappyAtAll
happyReduce_12 = happySpecReduce_1 10 happyReduction_12
happyReduction_12 (HappyTerminal (TokenQuotedLabel happy_var_1))
= HappyAbsSyn10
([happy_var_1]
)
happyReduction_12 _ = notHappyAtAll
happyReduce_13 = happySpecReduce_3 10 happyReduction_13
happyReduction_13 (HappyTerminal (TokenQuotedLabel happy_var_3))
_
(HappyAbsSyn10 happy_var_1)
= HappyAbsSyn10
(happy_var_3 : happy_var_1
)
happyReduction_13 _ _ _ = notHappyAtAll
happyReduce_14 = happySpecReduce_3 11 happyReduction_14
happyReduction_14 _
(HappyAbsSyn12 happy_var_2)
_
= HappyAbsSyn11
(reverse happy_var_2
)
happyReduction_14 _ _ _ = notHappyAtAll
happyReduce_15 = happySpecReduce_3 12 happyReduction_15
happyReduction_15 _
(HappyAbsSyn14 happy_var_2)
(HappyAbsSyn12 happy_var_1)
= HappyAbsSyn12
(happy_var_2 : happy_var_1
)
happyReduction_15 _ _ _ = notHappyAtAll
happyReduce_16 = happySpecReduce_0 12 happyReduction_16
happyReduction_16 = HappyAbsSyn12
([]
)
happyReduce_17 = happySpecReduce_1 13 happyReduction_17
happyReduction_17 (HappyTerminal happy_var_1)
= HappyAbsSyn13
(Just happy_var_1
)
happyReduction_17 _ = notHappyAtAll
happyReduce_18 = happySpecReduce_1 13 happyReduction_18
happyReduction_18 (HappyTerminal happy_var_1)
= HappyAbsSyn13
(Just happy_var_1
)
happyReduction_18 _ = notHappyAtAll
happyReduce_19 = happySpecReduce_0 13 happyReduction_19
happyReduction_19 = HappyAbsSyn13
(Nothing
)
happyReduce_20 = happySpecReduce_1 14 happyReduction_20
happyReduction_20 (HappyAbsSyn15 happy_var_1)
= HappyAbsSyn14
(happy_var_1
)
happyReduction_20 _ = notHappyAtAll
happyReduce_21 = happySpecReduce_1 14 happyReduction_21
happyReduction_21 (HappyAbsSyn21 happy_var_1)
= HappyAbsSyn14
(happy_var_1
)
happyReduction_21 _ = notHappyAtAll
happyReduce_22 = happySpecReduce_1 14 happyReduction_22
happyReduction_22 (HappyAbsSyn19 happy_var_1)
= HappyAbsSyn14
(happy_var_1
)
happyReduction_22 _ = notHappyAtAll
happyReduce_23 = happySpecReduce_3 14 happyReduction_23
happyReduction_23 (HappyAbsSyn8 happy_var_3)
_
(HappyAbsSyn8 happy_var_1)
= HappyAbsSyn14
(AttributeStatement (show happy_var_1, show happy_var_3)
)
happyReduction_23 _ _ _ = notHappyAtAll
happyReduce_24 = happySpecReduce_1 14 happyReduction_24
happyReduction_24 (HappyAbsSyn24 happy_var_1)
= HappyAbsSyn14
(SubgraphStatement happy_var_1
)
happyReduction_24 _ = notHappyAtAll
happyReduce_25 = happySpecReduce_2 15 happyReduction_25
happyReduction_25 (HappyAbsSyn16 happy_var_2)
_
= HappyAbsSyn15
(NodeAttribute happy_var_2
)
happyReduction_25 _ _ = notHappyAtAll
happyReduce_26 = happySpecReduce_2 15 happyReduction_26
happyReduction_26 (HappyAbsSyn16 happy_var_2)
_
= HappyAbsSyn15
(EdgeAttribute happy_var_2
)
happyReduction_26 _ _ = notHappyAtAll
happyReduce_27 = happySpecReduce_2 15 happyReduction_27
happyReduction_27 (HappyAbsSyn16 happy_var_2)
_
= HappyAbsSyn15
(GraphAttribute happy_var_2
)
happyReduction_27 _ _ = notHappyAtAll
happyReduce_28 = happySpecReduce_1 16 happyReduction_28
happyReduction_28 (HappyAbsSyn17 happy_var_1)
= HappyAbsSyn16
(reverse happy_var_1
)
happyReduction_28 _ = notHappyAtAll
happyReduce_29 = happyReduce 4 17 happyReduction_29
happyReduction_29 (_ `HappyStk`
(HappyAbsSyn18 happy_var_3) `HappyStk`
_ `HappyStk`
(HappyAbsSyn17 happy_var_1) `HappyStk`
happyRest)
= HappyAbsSyn17
(happy_var_3 ++ happy_var_1
) `HappyStk` happyRest
happyReduce_30 = happySpecReduce_0 17 happyReduction_30
happyReduction_30 = HappyAbsSyn17
([]
)
happyReduce_31 = happyReduce 5 18 happyReduction_31
happyReduction_31 ((HappyAbsSyn8 happy_var_5) `HappyStk`
_ `HappyStk`
(HappyAbsSyn8 happy_var_3) `HappyStk`
_ `HappyStk`
(HappyAbsSyn18 happy_var_1) `HappyStk`
happyRest)
= HappyAbsSyn18
(( happy_var_3, happy_var_5) : happy_var_1
) `HappyStk` happyRest
happyReduce_32 = happySpecReduce_0 18 happyReduction_32
happyReduction_32 = HappyAbsSyn18
([]
)
happyReduce_33 = happySpecReduce_3 19 happyReduction_33
happyReduction_33 (HappyAbsSyn16 happy_var_3)
(HappyAbsSyn20 happy_var_2)
(HappyAbsSyn22 happy_var_1)
= HappyAbsSyn19
(EdgeStatement ((uncurry NodeRef happy_var_1):(reverse happy_var_2)) happy_var_3
)
happyReduction_33 _ _ _ = notHappyAtAll
happyReduce_34 = happySpecReduce_3 19 happyReduction_34
happyReduction_34 (HappyAbsSyn16 happy_var_3)
(HappyAbsSyn20 happy_var_2)
(HappyAbsSyn24 happy_var_1)
= HappyAbsSyn19
(EdgeStatement (happy_var_1:(reverse happy_var_2)) happy_var_3
)
happyReduction_34 _ _ _ = notHappyAtAll
happyReduce_35 = happySpecReduce_3 20 happyReduction_35
happyReduction_35 (HappyAbsSyn22 happy_var_3)
_
(HappyAbsSyn20 happy_var_1)
= HappyAbsSyn20
((uncurry NodeRef happy_var_3) : happy_var_1
)
happyReduction_35 _ _ _ = notHappyAtAll
happyReduce_36 = happySpecReduce_3 20 happyReduction_36
happyReduction_36 (HappyAbsSyn24 happy_var_3)
_
(HappyAbsSyn20 happy_var_1)
= HappyAbsSyn20
(happy_var_3 : happy_var_1
)
happyReduction_36 _ _ _ = notHappyAtAll
happyReduce_37 = happySpecReduce_2 20 happyReduction_37
happyReduction_37 (HappyAbsSyn22 happy_var_2)
_
= HappyAbsSyn20
([uncurry NodeRef happy_var_2]
)
happyReduction_37 _ _ = notHappyAtAll
happyReduce_38 = happySpecReduce_2 20 happyReduction_38
happyReduction_38 (HappyAbsSyn24 happy_var_2)
_
= HappyAbsSyn20
([happy_var_2]
)
happyReduction_38 _ _ = notHappyAtAll
happyReduce_39 = happyMonadReduce 2 20 happyReduction_39
happyReduction_39 (_ `HappyStk`
_ `HappyStk`
happyRest) tk
= happyThen ((( getLineNumber `thenE` \line -> failE $ "Unfinished edge statement."))
) (\r -> happyReturn (HappyAbsSyn20 r))
happyReduce_40 = happyMonadReduce 2 20 happyReduction_40
happyReduction_40 (_ `HappyStk`
_ `HappyStk`
happyRest) tk
= happyThen ((( getLineNumber `thenE` \line -> failE $ "Unfinished edge statement."))
) (\r -> happyReturn (HappyAbsSyn20 r))
happyReduce_41 = happySpecReduce_2 21 happyReduction_41
happyReduction_41 (HappyAbsSyn16 happy_var_2)
(HappyAbsSyn22 happy_var_1)
= HappyAbsSyn21
((uncurry NodeStatement) happy_var_1 happy_var_2
)
happyReduction_41 _ _ = notHappyAtAll
happyReduce_42 = happySpecReduce_1 22 happyReduction_42
happyReduction_42 (HappyAbsSyn8 happy_var_1)
= HappyAbsSyn22
((happy_var_1, Nothing)
)
happyReduction_42 _ = notHappyAtAll
happyReduce_43 = happySpecReduce_2 22 happyReduction_43
happyReduction_43 (HappyAbsSyn23 happy_var_2)
(HappyAbsSyn8 happy_var_1)
= HappyAbsSyn22
((happy_var_1, (Just happy_var_2))
)
happyReduction_43 _ _ = notHappyAtAll
happyReduce_44 = happySpecReduce_2 23 happyReduction_44
happyReduction_44 (HappyAbsSyn8 happy_var_2)
_
= HappyAbsSyn23
(case toCompass $ show happy_var_2 of
Just c -> Port Nothing (Just c)
Nothing -> Port (if show happy_var_2 == "_" then Nothing else (Just happy_var_2)) Nothing
)
happyReduction_44 _ _ = notHappyAtAll
happyReduce_45 = happyReduce 4 23 happyReduction_45
happyReduction_45 ((HappyTerminal (TokenLabel happy_var_4)) `HappyStk`
_ `HappyStk`
(HappyAbsSyn8 happy_var_2) `HappyStk`
_ `HappyStk`
happyRest)
= HappyAbsSyn23
(Port (Just happy_var_2) (toCompass happy_var_4)
) `HappyStk` happyRest
happyReduce_46 = happySpecReduce_3 24 happyReduction_46
happyReduction_46 (HappyAbsSyn11 happy_var_3)
(HappyAbsSyn7 happy_var_2)
_
= HappyAbsSyn24
(Subgraph happy_var_2 happy_var_3
)
happyReduction_46 _ _ _ = notHappyAtAll
happyReduce_47 = happySpecReduce_1 24 happyReduction_47
happyReduction_47 (HappyAbsSyn11 happy_var_1)
= HappyAbsSyn24
(Subgraph (StringID "") happy_var_1
)
happyReduction_47 _ = notHappyAtAll
happyReduce_48 = happySpecReduce_3 25 happyReduction_48
happyReduction_48 (HappyTerminal (TokenCT happy_var_3))
(HappyAbsSyn26 happy_var_2)
(HappyTerminal (TokenOT happy_var_1))
= HappyAbsSyn25
(show happy_var_1 ++ (concat $ reverse happy_var_2) ++ show happy_var_3
)
happyReduction_48 _ _ _ = notHappyAtAll
happyReduce_49 = happySpecReduce_2 26 happyReduction_49
happyReduction_49 (HappyAbsSyn27 happy_var_2)
(HappyAbsSyn26 happy_var_1)
= HappyAbsSyn26
(happy_var_2 : happy_var_1
)
happyReduction_49 _ _ = notHappyAtAll
happyReduce_50 = happySpecReduce_0 26 happyReduction_50
happyReduction_50 = HappyAbsSyn26
([]
)
happyReduce_51 = happySpecReduce_3 27 happyReduction_51
happyReduction_51 (HappyTerminal (TokenCT happy_var_3))
(HappyAbsSyn26 happy_var_2)
(HappyTerminal (TokenOT happy_var_1))
= HappyAbsSyn27
(show happy_var_1 ++ (concat $ reverse happy_var_2) ++ show happy_var_3
)
happyReduction_51 _ _ _ = notHappyAtAll
happyReduce_52 = happySpecReduce_1 27 happyReduction_52
happyReduction_52 (HappyTerminal (TokenProc happy_var_1))
= HappyAbsSyn27
(show happy_var_1
)
happyReduction_52 _ = notHappyAtAll
happyNewToken action sts stk
= lexer(\tk ->
let cont i = action i i tk (HappyState action) sts stk in
case tk of {
TokenEOF -> action 49 49 tk (HappyState action) sts stk;
TokenGraph -> cont 28;
TokenDigraph -> cont 29;
TokenNode -> cont 30;
TokenEdge -> cont 31;
TokenSubgraph -> cont 32;
TokenLabel happy_dollar_dollar -> cont 33;
TokenQuotedLabel happy_dollar_dollar -> cont 34;
TokenStrict -> cont 35;
TokenArrow happy_dollar_dollar -> cont 36;
TokenEQ -> cont 37;
TokenOCB -> cont 38;
TokenCCB -> cont 39;
TokenOSB -> cont 40;
TokenCSB -> cont 41;
TokenCo -> cont 42;
TokenSemiCo -> cont 43;
TokenComma -> cont 44;
TokenPlus -> cont 45;
TokenCT happy_dollar_dollar -> cont 46;
TokenOT happy_dollar_dollar -> cont 47;
TokenProc happy_dollar_dollar -> cont 48;
_ -> happyError' (tk, [])
})
happyError_ explist 49 tk = happyError' (tk, explist)
happyError_ explist _ tk = happyError' (tk, explist)
happyThen :: () => P a -> (a -> P b) -> P b
happyThen = (thenE)
happyReturn :: () => a -> P a
happyReturn = (returnE)
happyThen1 :: () => P a -> (a -> P b) -> P b
happyThen1 = happyThen
happyReturn1 :: () => a -> P a
happyReturn1 = happyReturn
happyError' :: () => ((Token), [String]) -> P a
happyError' tk = (\(tokens, _) -> parseError tokens) tk
dot = happySomeParser where
happySomeParser = happyThen (happyParse action_0) (\x -> case x of {HappyAbsSyn4 z -> happyReturn z; _other -> notHappyAtAll })
happySeq = happyDontSeq
data Except a = Success a | Failure String
type P a = String -> Int -> Except a
thenE :: P a -> (a -> P b) -> P b
thenE m k s l =
case m s l of
Success a -> k a s l
Failure e -> Failure e
returnE :: a -> P a
returnE a s l = Success a
failE :: String -> P a
failE e s l = Failure $ "Error on line " ++ show l ++ ": " ++ e
catchE :: P a -> (String -> P a) -> P a
catchE m k s l = case m s l of
Success a -> Success a
Failure e -> k e s l
getLineNumber s l = Success l
parseError :: Token -> P a
parseError t = getLineNumber `thenE` \line -> failE $ "Parse error on line " ++ show line ++ "."
data Token =
TokenGraph
| TokenDigraph
| TokenNode
| TokenEdge
| TokenSubgraph
| TokenStrict
| TokenLabel String
| TokenQuotedLabel String
| TokenXML String
| TokenCompass Compass
| TokenArrow Char
| TokenEQ
| TokenOCB
| TokenCCB
| TokenOSB
| TokenCSB
| TokenCo
| TokenSemiCo
| TokenComma
| TokenCT String
| TokenOT String
| TokenProc String
| TokenPlus
| TokenEOF
deriving (Eq)
instance Show Token where
show tk = case tk of
TokenGraph -> "graph"
TokenDigraph -> "digraph"
TokenNode -> "node"
TokenEdge -> "edge"
TokenSubgraph -> "subgraph"
TokenStrict -> "strict"
TokenLabel label -> label
TokenQuotedLabel label -> label
TokenXML xml -> xml
TokenCompass compass -> show compass
TokenArrow c -> [c]
TokenEQ -> "="
TokenOCB -> "{"
TokenCCB -> "]"
TokenOSB -> "["
TokenCSB -> "]"
TokenCo -> ":"
TokenSemiCo -> ";"
TokenComma -> ","
TokenCT tag -> "</" ++ tag ++ ">"
TokenOT tag -> "<" ++ tag ++ ">"
TokenProc xml -> "<?" ++ xml ++ ">"
TokenPlus -> "+"
TokenEOF -> ""
parse s = case dot ('\n':s) 0 of -- A newline is added to treat '#' in the beginning of a line properly.
Success ast -> Right ast
Failure msg -> Left msg
toCompass l =
case map toLower l of
"n" -> Just $ North
"ne" -> Just $ NorthEast
"e" -> Just $ East
"se" -> Just $ SouthEast
"s" -> Just $ South
"sw" -> Just $ SouthWest
"w" -> Just $ West
"nw" -> Just $ NorthWest
"c" -> Just $ Center
"_" -> Nothing
_ -> Nothing
lexer :: (Token -> (P a)) -> (P a)
lexer cont str line = case dropWhile (\c -> c /= '\n' && isSpace c) str of
'\n':'#':s' -> let s'' = dropWhile (/= '\n') s' in lexer cont s'' (line + 1)
'\n':s' -> lexer cont s' (line +1)
',':s' -> cont TokenComma s' line
';':s' -> cont TokenSemiCo s' line
's':'u':'b':'g':'r':'a':'p':'h':s' -> cont TokenSubgraph s' line
'g':'r':'a':'p':'h':s' -> cont TokenGraph s' line
'd':'i':'g':'r':'a':'p':'h':s' -> cont TokenDigraph s' line
'e':'d':'g':'e':s' -> cont TokenEdge s' line
'n':'o':'d':'e':s' -> cont TokenNode s' line
's':'t':'r':'i':'c':'t':s' -> cont TokenStrict s' line
'{':s' -> cont TokenOCB s' line
'}':s' -> cont TokenCCB s' line
'[':s' -> cont TokenOSB s' line
']':s' -> cont TokenCSB s' line
'+':s' -> cont TokenPlus s' line
'=':s' -> cont TokenEQ s' line
':':s' -> cont TokenCo s' line
'-':'-':s' -> cont (TokenArrow '-') s' line
'-':'>':s' -> cont (TokenArrow '>') s' line
'/':'/':s' -> let s'' = dropWhile (/= '\n') s' in lexer cont s'' line
'/':'*':s' -> let (s'', line') = execState consumeComment (s', line)
in lexer cont s'' (line')
'"':s' -> let (qs, (s'', line')) = runState consumeQuotedString (s', line)
in case qs of
Right string -> cont (TokenQuotedLabel string) s'' line'
Left msg -> failE msg s' line'
'<':'/':s' -> let (tag, (s'', line')) = runState consumeTag (s', line)
in cont (TokenCT tag) (tail s'') line'
'<':'!':'-':'-':s' -> let (s'', line') = execState consumeXMLComment (s', line)
in lexer cont s'' line'
'<':'?':s' -> let (proc, (s'', line')) = runState consumeProcessing (s', line)
in cont (TokenProc proc) s'' line'
[] -> cont TokenEOF [] line
s' -> let (label, s'') = span (\x -> not $ isSpace x || x `elem` ";,{}[]=\"") s'
in if null label then failE ("Unexpected character: " ++ [head s'']) s' line
else cont (TokenLabel label) s'' line
--consumeToken = do
-- consumeWhile (\c -> isSpace c || c `elem` ";,")
-- t <- consumeSomeString -- TODO: This can be made faster by using a trie
-- [ ("subgraph", TokenSubgraph)
-- , ("graph", TokenGraph)
-- , ("digraph", TokenDigraph)
-- , ("edge", TokenEdge)
-- , ("node", TokenNode)
-- , ("strict", TokenStrict)
-- , ("{", TokenOCB)
-- , ("}", TokenCCB)
-- , ("[", TokenOSB)
-- , ("]", TokenCSB)
-- , ("+", TokenPlus)
-- , ("=", TokenEQ)
-- , (":", TokenCo)
-- , ("--", TokenArrow '-')
-- , ("->", TokenArrow '>')]
-- case t of
-- Just t' -> return t
-- Nothing -> do
-- action <- consumeSomeString
-- [ ('/':"/", consumeWhile (/= '\n') >> consumeToken)
-- , ('#', consumeWhile (/= '\n') >> consumeToken)
-- , ('/':"*", consumeComment >> consumeToken)
-- , ("\"", consumeQuotedString >>= (\s -> return (Just $ TokenLabel s)))
-- , ("</", do
-- tag <- consumeWhile (\x -> x /= '>')
-- consumeOnce (=='>')
-- return $ Just $ TokenCT)
-- , ("<!--", consumeXMLComment >> consumeToken)
-- , ("<?", consumeProcessing >> return (Just TokenProc))
-- ]
-- case action of
-- Just act -> act
-- Nothing -> do
-- str <- get
-- s <- consumeWhile (not . (\x -> isSpace x || x `elem` ";,{}[]=\""))
-- if null s then return Nothing else return $ Just $ TokenLabel s
--lexer' = do
-- t <- consumeToken
-- case t of
-- Just x -> do
-- ts <- lexer'
-- return $ x : ts
-- Nothing -> return []
--
{-# LINE 1 "templates/GenericTemplate.hs" #-}
-- $Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp $
data Happy_IntList = HappyCons Int Happy_IntList
infixr 9 `HappyStk`
data HappyStk a = HappyStk a (HappyStk a)
-----------------------------------------------------------------------------
-- starting the parse
happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll
-----------------------------------------------------------------------------
-- Accepting the parse
-- If the current token is ERROR_TOK, it means we've just accepted a partial
-- parse (a %partial parser). We must ignore the saved token on the top of
-- the stack in this case.
happyAccept (1) tk st sts (_ `HappyStk` ans `HappyStk` _) =
happyReturn1 ans
happyAccept j tk st sts (HappyStk ans _) =
(happyReturn1 ans)
-----------------------------------------------------------------------------
-- Arrays only: do the next action
indexShortOffAddr arr off = arr Happy_Data_Array.! off
{-# INLINE happyLt #-}
happyLt x y = (x < y)
readArrayBit arr bit =
Bits.testBit (indexShortOffAddr arr (bit `div` 16)) (bit `mod` 16)
-----------------------------------------------------------------------------
-- HappyState data type (not arrays)
newtype HappyState b c = HappyState
(Int -> -- token number
Int -> -- token number (yes, again)
b -> -- token semantic value
HappyState b c -> -- current state
[HappyState b c] -> -- state stack
c)
-----------------------------------------------------------------------------
-- Shifting a token
happyShift new_state (1) tk st sts stk@(x `HappyStk` _) =
let i = (case x of { HappyErrorToken (i) -> i }) in
-- trace "shifting the error token" $
new_state i i tk (HappyState (new_state)) ((st):(sts)) (stk)
happyShift new_state i tk st sts stk =
happyNewToken new_state ((st):(sts)) ((HappyTerminal (tk))`HappyStk`stk)
-- happyReduce is specialised for the common cases.
happySpecReduce_0 i fn (1) tk st sts stk
= happyFail [] (1) tk st sts stk
happySpecReduce_0 nt fn j tk st@((HappyState (action))) sts stk
= action nt j tk st ((st):(sts)) (fn `HappyStk` stk)
happySpecReduce_1 i fn (1) tk st sts stk
= happyFail [] (1) tk st sts stk
happySpecReduce_1 nt fn j tk _ sts@(((st@(HappyState (action))):(_))) (v1`HappyStk`stk')
= let r = fn v1 in
happySeq r (action nt j tk st sts (r `HappyStk` stk'))
happySpecReduce_2 i fn (1) tk st sts stk
= happyFail [] (1) tk st sts stk
happySpecReduce_2 nt fn j tk _ ((_):(sts@(((st@(HappyState (action))):(_))))) (v1`HappyStk`v2`HappyStk`stk')
= let r = fn v1 v2 in
happySeq r (action nt j tk st sts (r `HappyStk` stk'))
happySpecReduce_3 i fn (1) tk st sts stk
= happyFail [] (1) tk st sts stk
happySpecReduce_3 nt fn j tk _ ((_):(((_):(sts@(((st@(HappyState (action))):(_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')
= let r = fn v1 v2 v3 in
happySeq r (action nt j tk st sts (r `HappyStk` stk'))
happyReduce k i fn (1) tk st sts stk
= happyFail [] (1) tk st sts stk
happyReduce k nt fn j tk st sts stk
= case happyDrop (k - ((1) :: Int)) sts of
sts1@(((st1@(HappyState (action))):(_))) ->
let r = fn stk in -- it doesn't hurt to always seq here...
happyDoSeq r (action nt j tk st1 sts1 r)
happyMonadReduce k nt fn (1) tk st sts stk
= happyFail [] (1) tk st sts stk
happyMonadReduce k nt fn j tk st sts stk =
case happyDrop k ((st):(sts)) of
sts1@(((st1@(HappyState (action))):(_))) ->
let drop_stk = happyDropStk k stk in
happyThen1 (fn stk tk) (\r -> action nt j tk st1 sts1 (r `HappyStk` drop_stk))
happyMonad2Reduce k nt fn (1) tk st sts stk
= happyFail [] (1) tk st sts stk
happyMonad2Reduce k nt fn j tk st sts stk =
case happyDrop k ((st):(sts)) of
sts1@(((st1@(HappyState (action))):(_))) ->
let drop_stk = happyDropStk k stk
_ = nt :: Int
new_state = action
in
happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))
happyDrop (0) l = l
happyDrop n ((_):(t)) = happyDrop (n - ((1) :: Int)) t
happyDropStk (0) l = l
happyDropStk n (x `HappyStk` xs) = happyDropStk (n - ((1)::Int)) xs
-----------------------------------------------------------------------------
-- Moving to a new state after a reduction
happyGoto action j tk st = action j j tk (HappyState action)
-----------------------------------------------------------------------------
-- Error recovery (ERROR_TOK is the error token)
-- parse error if we are in recovery and we fail again
happyFail explist (1) tk old_st _ stk@(x `HappyStk` _) =
let i = (case x of { HappyErrorToken (i) -> i }) in
-- trace "failing" $
happyError_ explist i tk
{- We don't need state discarding for our restricted implementation of
"error". In fact, it can cause some bogus parses, so I've disabled it
for now --SDM
-- discard a state
happyFail ERROR_TOK tk old_st CONS(HAPPYSTATE(action),sts)
(saved_tok `HappyStk` _ `HappyStk` stk) =
-- trace ("discarding state, depth " ++ show (length stk)) $
DO_ACTION(action,ERROR_TOK,tk,sts,(saved_tok`HappyStk`stk))
-}
-- Enter error recovery: generate an error token,
-- save the old token and carry on.
happyFail explist i tk (HappyState (action)) sts stk =
-- trace "entering error recovery" $
action (1) (1) tk (HappyState (action)) sts ((HappyErrorToken (i)) `HappyStk` stk)
-- Internal happy errors:
notHappyAtAll :: a
notHappyAtAll = error "Internal Happy error\n"
-----------------------------------------------------------------------------
-- Hack to get the typechecker to accept our action functions
-----------------------------------------------------------------------------
-- Seq-ing. If the --strict flag is given, then Happy emits
-- happySeq = happyDoSeq
-- otherwise it emits
-- happySeq = happyDontSeq
happyDoSeq, happyDontSeq :: a -> b -> b
happyDoSeq a b = a `seq` b
happyDontSeq a b = b
-----------------------------------------------------------------------------
-- Don't inline any functions from the template. GHC has a nasty habit
-- of deciding to inline happyGoto everywhere, which increases the size of
-- the generated parser quite a bit.
{-# NOINLINE happyShift #-}
{-# NOINLINE happySpecReduce_0 #-}
{-# NOINLINE happySpecReduce_1 #-}
{-# NOINLINE happySpecReduce_2 #-}
{-# NOINLINE happySpecReduce_3 #-}
{-# NOINLINE happyReduce #-}
{-# NOINLINE happyMonadReduce #-}
{-# NOINLINE happyGoto #-}
{-# NOINLINE happyFail #-}
-- end of Happy Template.