@@ -12,7 +12,7 @@ import Copager2.Core.Language.Token (TokenSet)
1212import Copager2.Core.Language.Rule (RuleElem (.. ), RuleSet (.. ))
1313import Copager2.Parse.Common.Follow (mkFollowSet )
1414import Copager2.Parse.LR.Common.Stack (Stack , mkStack )
15- import Copager2.Parse.LR.Common.Table (LRAction (.. ), LRTables , LRTableBuilder , build , mark )
15+ import Copager2.Parse.LR.Common.Table (LRAction (.. ), LRTables , LRTableBuilder , build , mark , tryMark )
1616import Copager2.Parse.LR.Common.LR0.DFA (LR0DFANode (.. ), mkDFA , contains , findAll )
1717import Copager2.Parse.LR.Common.LR0.Item (LR0Item (.. ), isAcceptState , isReduceState )
1818
@@ -35,29 +35,29 @@ mkSLR1 =
3535 followSet = mkFollowSet topRule
3636 dfa = mkDFA topRule
3737 table = build dfa $ \ node@ LR0DFANode { id } -> do
38- -- S -> Top . を含む場合, EOF 列に対して Accept をマーク
39- when (contains node isAcceptState) $
40- markAccept id
4138 -- A -> α β . を含む場合,Follow 列に対して Reduce をマーク
4239 forM_ (findAll node isReduceState) $ \ item@ LR0Item { lhs } ->
4340 forM_ (followSet ! fromJust lhs) $
44- markReduce id item
41+ tryMarkReduce id item
42+ -- S -> Top . を含む場合, EOF 列に対して Accept をマーク
43+ when (contains node isAcceptState) $
44+ markAccept id
4545 in SLR1 { stack = mkStack, table }
4646
47- markAccept :: (TokenSet ts , RuleSet ts rs )
48- => Int
49- -> LRTableBuilder ts rs ()
50- markAccept id = mark id Nothing Accept
51-
52- markReduce :: (TokenSet ts , RuleSet ts rs )
47+ tryMarkReduce :: (TokenSet ts , RuleSet ts rs )
5348 => Int
5449 -> LR0Item ts rs
5550 -> RuleElem ts rs
5651 -> LRTableBuilder ts rs ()
57- markReduce id LR0Item { lhs = Just lhs, rhsPre } (Term term) =
52+ tryMarkReduce id LR0Item { lhs = Just lhs, rhsPre } (Term term) =
5853 let rhsLen = length rhsPre
59- in mark id (Just term) $ Reduce lhs rhsLen
60- markReduce id LR0Item { lhs = Just lhs, rhsPre } EOF =
54+ in tryMark id (Just term) $ Reduce lhs rhsLen
55+ tryMarkReduce id LR0Item { lhs = Just lhs, rhsPre } EOF =
6156 let rhsLen = length rhsPre
62- in mark id Nothing $ Reduce lhs rhsLen
63- markReduce _ _ _ = return ()
57+ in tryMark id Nothing $ Reduce lhs rhsLen
58+ tryMarkReduce _ _ _ = return ()
59+
60+ markAccept :: (TokenSet ts , RuleSet ts rs )
61+ => Int
62+ -> LRTableBuilder ts rs ()
63+ markAccept id = mark id Nothing Accept
0 commit comments