From 0b247ad1be898f2bfd74392c8abb1c04c6db2616 Mon Sep 17 00:00:00 2001 From: Sebastian Graf Date: Sat, 16 Aug 2025 17:56:55 +0200 Subject: [PATCH 1/7] Rename internal parser entry function from `happyParse` to `happyDoParse` Otherwise we get a clash when users omit a `%name` declaration, because then the default name for the parser is `happyParse`. --- lib/backend-lalr/src/Happy/Backend/LALR/ProduceCode.lhs | 8 ++++---- lib/data/HappyTemplate.hs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/backend-lalr/src/Happy/Backend/LALR/ProduceCode.lhs b/lib/backend-lalr/src/Happy/Backend/LALR/ProduceCode.lhs index 429e5142..423d15cc 100644 --- a/lib/backend-lalr/src/Happy/Backend/LALR/ProduceCode.lhs +++ b/lib/backend-lalr/src/Happy/Backend/LALR/ProduceCode.lhs @@ -651,8 +651,8 @@ MonadStuff: > . str "\n" > _ -> > let -> happyParseSig = -> str "happyParse :: " . pcont . str " => " . intMaybeHash +> happyDoParseSig = +> str "happyDoParse :: " . pcont . str " => " . intMaybeHash > . str " -> " . pty . str " " . happyAbsSyn . str "\n" > . str "\n" > newTokenSig = @@ -673,7 +673,7 @@ MonadStuff: > . str " -> Happy_IntList -> HappyStk " . happyAbsSyn > . str " -> " . ptyAt happyAbsSyn . str ")\n" > . str "\n" -> in happyParseSig . newTokenSig . doActionSig . reduceArrSig +> in happyDoParseSig . newTokenSig . doActionSig . reduceArrSig > . str "happyThen1 :: " . pcont . str " => " . pty > . str " a -> (a -> " . pty > . str " b) -> " . pty . str " b\n" @@ -750,7 +750,7 @@ have a special code path for `OldExpected`. > . str " = " > . str unmonad > . str "happySomeParser where\n" -> . str " happySomeParser = happyThen (happyParse " +> . str " happySomeParser = happyThen (happyDoParse " > . shows no . str "#" > . maybe_tks > . str ") " diff --git a/lib/data/HappyTemplate.hs b/lib/data/HappyTemplate.hs index f02d67ea..dcda2e22 100644 --- a/lib/data/HappyTemplate.hs +++ b/lib/data/HappyTemplate.hs @@ -48,7 +48,7 @@ data HappyStk a = HappyStk a (HappyStk a) ----------------------------------------------------------------------------- -- starting the parse -happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll +happyDoParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll ----------------------------------------------------------------------------- -- Accepting the parse From c4ac82d94e3b5b9f956b23d0b5fd1584a031ca1f Mon Sep 17 00:00:00 2001 From: Reed Mullanix Date: Tue, 5 Aug 2025 18:28:41 -0400 Subject: [PATCH 2/7] Add pragma parsing to happy grammar --- lib/frontend/boot-src/Parser.ly | 7 +- lib/frontend/src/Happy/Frontend/AbsSyn.lhs | 5 +- .../src/Happy/Frontend/AttrGrammar/Parser.hs | 99 +++---- lib/frontend/src/Happy/Frontend/Lexer.lhs | 43 ++- lib/frontend/src/Happy/Frontend/Parser.hs | 270 ++++++++++-------- 5 files changed, 246 insertions(+), 178 deletions(-) diff --git a/lib/frontend/boot-src/Parser.ly b/lib/frontend/boot-src/Parser.ly index a414703c..8e85a72d 100644 --- a/lib/frontend/boot-src/Parser.ly +++ b/lib/frontend/boot-src/Parser.ly @@ -37,6 +37,7 @@ The parser. > spec_errorhandlertype { TokenKW TokSpecId_ErrorHandlerType } > spec_attribute { TokenKW TokSpecId_Attribute } > spec_attributetype { TokenKW TokSpecId_Attributetype } +> pragma { TokenInfo $$ TokPragmaQuote } > code { TokenInfo $$ TokCodeQuote } > int { TokenNum $$ TokNum } > ":" { TokenKW TokColon } @@ -54,7 +55,7 @@ The parser. > %% > parser :: { BookendedAbsSyn } -> : optCode core_parser optCode { BookendedAbsSyn $1 $2 $3 } +> : optPragma optCode core_parser optCode { BookendedAbsSyn $1 $2 $3 $4 } > core_parser :: { AbsSyn String } > : tokInfos "%%" rules { AbsSyn (reverse $1) (reverse $3) } @@ -149,6 +150,10 @@ The parser. > : code { Just $1 } > | {- nothing -} { Nothing } +> optPragma :: { Maybe String } +> : pragma { Just $1 } +> | {- nothing -} { Nothing } + > { > happyError :: P a > happyError = failP (\l -> show l ++ ": Parse error\n") diff --git a/lib/frontend/src/Happy/Frontend/AbsSyn.lhs b/lib/frontend/src/Happy/Frontend/AbsSyn.lhs index 2f149e00..87ce1936 100644 --- a/lib/frontend/src/Happy/Frontend/AbsSyn.lhs +++ b/lib/frontend/src/Happy/Frontend/AbsSyn.lhs @@ -24,6 +24,7 @@ Here is the abstract syntax of the language we parse. > data BookendedAbsSyn > = BookendedAbsSyn +> (Maybe String) -- options > (Maybe String) -- header > (AbsSyn String) > (Maybe String) -- footer @@ -64,7 +65,7 @@ Parser Generator Directives. ToDo: find a consistent way to analyse all the directives together and generate some error messages. -> + > data Directive a > = TokenType String -- %tokentype > | TokenSpec [(a, TokenSpec)] -- %token @@ -191,7 +192,7 @@ generate some error messages. > where go code acc = > case code of > [] -> TokenFixed code0 -> + > '"' :r -> case reads code :: [(String,String)] of > [] -> go r ('"':acc) > (s,r'):_ -> go r' (reverse (show s) ++ acc) diff --git a/lib/frontend/src/Happy/Frontend/AttrGrammar/Parser.hs b/lib/frontend/src/Happy/Frontend/AttrGrammar/Parser.hs index 88d55c1e..fc800f62 100644 --- a/lib/frontend/src/Happy/Frontend/AttrGrammar/Parser.hs +++ b/lib/frontend/src/Happy/Frontend/AttrGrammar/Parser.hs @@ -8,29 +8,32 @@ {-# LANGUAGE NoStrictData #-} {-# LANGUAGE UnboxedTuples #-} {-# LANGUAGE PartialTypeSignatures #-} +#if __GLASGOW_HASKELL__ >= 710 +{-# LANGUAGE PartialTypeSignatures #-} +#endif {-# OPTIONS_GHC -w #-} module Happy.Frontend.AttrGrammar.Parser (agParser) where import Happy.Frontend.ParseMonad.Class import Happy.Frontend.ParseMonad import Happy.Frontend.AttrGrammar -import qualified Control.Monad as Happy_Prelude +import qualified Data.Function as Happy_Prelude import qualified Data.Bool as Happy_Prelude import qualified Data.Function as Happy_Prelude -import qualified Data.Int as Happy_Prelude -import qualified Data.List as Happy_Prelude import qualified Data.Maybe as Happy_Prelude +import qualified Data.Int as Happy_Prelude import qualified Data.String as Happy_Prelude -import qualified Data.Tuple as Happy_Prelude -import qualified GHC.Err as Happy_Prelude -import qualified GHC.Num as Happy_Prelude +import qualified Data.List as Happy_Prelude +import qualified Control.Monad as Happy_Prelude import qualified Text.Show as Happy_Prelude +import qualified GHC.Num as Happy_Prelude +import qualified GHC.Err as Happy_Prelude import qualified Data.Array as Happy_Data_Array import qualified Data.Bits as Bits import qualified GHC.Exts as Happy_GHC_Exts import Control.Applicative(Applicative(..)) import Control.Monad (ap) --- parser produced by Happy Version 2.1.6 +-- parser produced by Happy Version 2.1.3 newtype HappyAbsSyn = HappyAbsSyn HappyAny #if __GLASGOW_HASKELL__ >= 607 @@ -139,7 +142,7 @@ happy_n_starts = 1 :: Happy_Prelude.Int happyReduce_1 :: () => Happy_GHC_Exts.Int# -> AgToken -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) happyReduce_1 = happySpecReduce_1 0# happyReduction_1 happyReduction_1 happy_x_1 - = case happyOut6 happy_x_1 of { (HappyWrap6 happy_var_1) -> + = case happyOut6 happy_x_1 of { (HappyWrap6 happy_var_1) -> happyIn5 (happy_var_1 )} @@ -149,8 +152,8 @@ happyReduce_2 = happySpecReduce_3 1# happyReduction_2 happyReduction_2 happy_x_3 happy_x_2 happy_x_1 - = case happyOut7 happy_x_1 of { (HappyWrap7 happy_var_1) -> - case happyOut6 happy_x_3 of { (HappyWrap6 happy_var_3) -> + = case happyOut7 happy_x_1 of { (HappyWrap7 happy_var_1) -> + case happyOut6 happy_x_3 of { (HappyWrap6 happy_var_3) -> happyIn6 (happy_var_1 : happy_var_3 )}} @@ -158,7 +161,7 @@ happyReduction_2 happy_x_3 happyReduce_3 :: () => Happy_GHC_Exts.Int# -> AgToken -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) happyReduce_3 = happySpecReduce_1 1# happyReduction_3 happyReduction_3 happy_x_1 - = case happyOut7 happy_x_1 of { (HappyWrap7 happy_var_1) -> + = case happyOut7 happy_x_1 of { (HappyWrap7 happy_var_1) -> happyIn6 (happy_var_1 : [] )} @@ -174,8 +177,8 @@ happyReduce_5 = happySpecReduce_3 2# happyReduction_5 happyReduction_5 happy_x_3 happy_x_2 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut8 happy_x_3 of { (HappyWrap8 happy_var_3) -> + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { (HappyWrap8 happy_var_3) -> happyIn7 (SelfAssign $ MkAgSelfAssign (selfRefVal happy_var_1) happy_var_3 )}} @@ -185,8 +188,8 @@ happyReduce_6 = happySpecReduce_3 2# happyReduction_6 happyReduction_6 happy_x_3 happy_x_2 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut8 happy_x_3 of { (HappyWrap8 happy_var_3) -> + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { (HappyWrap8 happy_var_3) -> happyIn7 (SubAssign $ MkAgSubAssign (subRefVal happy_var_1) happy_var_3 )}} @@ -196,8 +199,8 @@ happyReduce_7 = happySpecReduce_3 2# happyReduction_7 happyReduction_7 happy_x_3 happy_x_2 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut8 happy_x_3 of { (HappyWrap8 happy_var_3) -> + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { (HappyWrap8 happy_var_3) -> happyIn7 (RightmostAssign (rightRefVal happy_var_1) happy_var_3 )}} @@ -206,7 +209,7 @@ happyReduce_8 :: () => Happy_GHC_Exts.Int# -> AgToken -> Happy_GHC_Exts.Int# -> happyReduce_8 = happySpecReduce_2 2# happyReduction_8 happyReduction_8 happy_x_2 happy_x_1 - = case happyOut8 happy_x_2 of { (HappyWrap8 happy_var_2) -> + = case happyOut8 happy_x_2 of { (HappyWrap8 happy_var_2) -> happyIn7 (Conditional $ MkAgConditional happy_var_2 )} @@ -218,10 +221,10 @@ happyReduction_9 (happy_x_4 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk` happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> - case happyOutTok happy_x_3 of { happy_var_3 -> - case happyOut8 happy_x_4 of { (HappyWrap8 happy_var_4) -> + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> + case happyOutTok happy_x_3 of { happy_var_3 -> + case happyOut8 happy_x_4 of { (HappyWrap8 happy_var_4) -> happyIn8 ([happy_var_1] ++ happy_var_2 ++ [happy_var_3] ++ happy_var_4 ) `HappyStk` happyRest}}}} @@ -230,8 +233,8 @@ happyReduce_10 :: () => Happy_GHC_Exts.Int# -> AgToken -> Happy_GHC_Exts.Int# -> happyReduce_10 = happySpecReduce_2 3# happyReduction_10 happyReduction_10 happy_x_2 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut8 happy_x_2 of { (HappyWrap8 happy_var_2) -> + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_2 of { (HappyWrap8 happy_var_2) -> happyIn8 (happy_var_1 : happy_var_2 )}} @@ -240,8 +243,8 @@ happyReduce_11 :: () => Happy_GHC_Exts.Int# -> AgToken -> Happy_GHC_Exts.Int# -> happyReduce_11 = happySpecReduce_2 3# happyReduction_11 happyReduction_11 happy_x_2 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut8 happy_x_2 of { (HappyWrap8 happy_var_2) -> + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_2 of { (HappyWrap8 happy_var_2) -> happyIn8 (happy_var_1 : happy_var_2 )}} @@ -250,8 +253,8 @@ happyReduce_12 :: () => Happy_GHC_Exts.Int# -> AgToken -> Happy_GHC_Exts.Int# -> happyReduce_12 = happySpecReduce_2 3# happyReduction_12 happyReduction_12 happy_x_2 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut8 happy_x_2 of { (HappyWrap8 happy_var_2) -> + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_2 of { (HappyWrap8 happy_var_2) -> happyIn8 (happy_var_1 : happy_var_2 )}} @@ -260,8 +263,8 @@ happyReduce_13 :: () => Happy_GHC_Exts.Int# -> AgToken -> Happy_GHC_Exts.Int# -> happyReduce_13 = happySpecReduce_2 3# happyReduction_13 happyReduction_13 happy_x_2 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut8 happy_x_2 of { (HappyWrap8 happy_var_2) -> + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_2 of { (HappyWrap8 happy_var_2) -> happyIn8 (happy_var_1 : happy_var_2 )}} @@ -270,8 +273,8 @@ happyReduce_14 :: () => Happy_GHC_Exts.Int# -> AgToken -> Happy_GHC_Exts.Int# -> happyReduce_14 = happySpecReduce_2 3# happyReduction_14 happyReduction_14 happy_x_2 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut8 happy_x_2 of { (HappyWrap8 happy_var_2) -> + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_2 of { (HappyWrap8 happy_var_2) -> happyIn8 (happy_var_1 : happy_var_2 )}} @@ -289,10 +292,10 @@ happyReduction_16 (happy_x_4 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk` happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> - case happyOutTok happy_x_3 of { happy_var_3 -> - case happyOut9 happy_x_4 of { (HappyWrap9 happy_var_4) -> + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> + case happyOutTok happy_x_3 of { happy_var_3 -> + case happyOut9 happy_x_4 of { (HappyWrap9 happy_var_4) -> happyIn9 ([happy_var_1] ++ happy_var_2 ++ [happy_var_3] ++ happy_var_4 ) `HappyStk` happyRest}}}} @@ -301,8 +304,8 @@ happyReduce_17 :: () => Happy_GHC_Exts.Int# -> AgToken -> Happy_GHC_Exts.Int# -> happyReduce_17 = happySpecReduce_2 4# happyReduction_17 happyReduction_17 happy_x_2 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> happyIn9 (happy_var_1 : happy_var_2 )}} @@ -311,8 +314,8 @@ happyReduce_18 :: () => Happy_GHC_Exts.Int# -> AgToken -> Happy_GHC_Exts.Int# -> happyReduce_18 = happySpecReduce_2 4# happyReduction_18 happyReduction_18 happy_x_2 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> happyIn9 (happy_var_1 : happy_var_2 )}} @@ -321,8 +324,8 @@ happyReduce_19 :: () => Happy_GHC_Exts.Int# -> AgToken -> Happy_GHC_Exts.Int# -> happyReduce_19 = happySpecReduce_2 4# happyReduction_19 happyReduction_19 happy_x_2 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> happyIn9 (happy_var_1 : happy_var_2 )}} @@ -331,8 +334,8 @@ happyReduce_20 :: () => Happy_GHC_Exts.Int# -> AgToken -> Happy_GHC_Exts.Int# -> happyReduce_20 = happySpecReduce_2 4# happyReduction_20 happyReduction_20 happy_x_2 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> happyIn9 (happy_var_1 : happy_var_2 )}} @@ -341,8 +344,8 @@ happyReduce_21 :: () => Happy_GHC_Exts.Int# -> AgToken -> Happy_GHC_Exts.Int# -> happyReduce_21 = happySpecReduce_2 4# happyReduction_21 happyReduction_21 happy_x_2 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut8 happy_x_2 of { (HappyWrap8 happy_var_2) -> + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_2 of { (HappyWrap8 happy_var_2) -> happyIn9 (happy_var_1 : happy_var_2 )}} @@ -351,8 +354,8 @@ happyReduce_22 :: () => Happy_GHC_Exts.Int# -> AgToken -> Happy_GHC_Exts.Int# -> happyReduce_22 = happySpecReduce_2 4# happyReduction_22 happyReduction_22 happy_x_2 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> happyIn9 (happy_var_1 : happy_var_2 )}} diff --git a/lib/frontend/src/Happy/Frontend/Lexer.lhs b/lib/frontend/src/Happy/Frontend/Lexer.lhs index de32d425..b7ae4c29 100644 --- a/lib/frontend/src/Happy/Frontend/Lexer.lhs +++ b/lib/frontend/src/Happy/Frontend/Lexer.lhs @@ -51,6 +51,7 @@ The lexer. > | TokSpecId_ErrorHandlerType -- %errorhandlertype > | TokSpecId_Attributetype -- %attributetype > | TokSpecId_Attribute -- %attribute +> | TokPragmaQuote -- stuff inside {-# .. #-} > | TokCodeQuote -- stuff inside { .. } > | TokColon -- : > | TokSemiColon -- ; @@ -72,6 +73,7 @@ ToDo: proper text instance here, for use in parser error messages. > lexer cont = lexer' > where lexer' "" = cont TokenEOF "" > lexer' ('-':'-':r) = lexer' (dropWhile (/= '\n') r) +> lexer' ('{':'-':'#':r) = lexPragma cont r > lexer' ('{':'-':r) = \line -> lexNestedComment line lexer' r line > lexer' (c:rest) = nextLex cont c rest @@ -165,6 +167,8 @@ followed by a special identifier. > lexCode :: (Token -> Pfunc a) -> String -> Int -> ParseResult a > lexCode cont rest = lexReadCode rest (0 :: Integer) "" cont + lexBracket cont rest = lexReadCode rest (0 :: Integer) "" cont + > lexNum :: (Token -> Pfunc a) -> Char -> String -> Int -> ParseResult a > lexNum cont c rest = > readNum rest (\ num rest' -> @@ -183,26 +187,51 @@ here is a bit tricky, but should work in most cases. > -> ParseResult b > lexReadCode s n c = case s of > '\n':r -> \cont l -> lexReadCode r n ('\n':c) cont (l+1) -> + > '{' :r -> lexReadCode r (n+1) ('{':c) -> + > '}' :r > | n == 0 -> \cont -> cont (TokenInfo ( > cleanupCode (reverse c)) TokCodeQuote) r > | otherwise -> lexReadCode r (n-1) ('}':c) -> + > '"'{-"-}:r -> lexReadString r (\ str r' -> > lexReadCode r' n ('"' : (reverse str) ++ '"' : c)) -> + > a: '\'':r | isAlphaNum a -> lexReadCode r n ('\'':a:c) -> + > '\'' :r -> lexReadSingleChar r (\ str r' -> > lexReadCode r' n ((reverse str) ++ '\'' : c)) -> + > ch:r -> lexReadCode r n (ch:c) -> + > [] -> \_cont -> lexError "No closing '}' in code segment" [] +We need to take similar care when parsing pragmas. + +> lexPragma :: (Token -> Pfunc a) -> String -> Int -> ParseResult a +> lexPragma cont s = lexReadPragma s "" cont + +> lexReadPragma :: String -> String -> (Token -> Pfunc a) -> Int -> ParseResult a +> lexReadPragma s c = case s of +> '\n':r -> \cont l -> lexReadPragma r ('\n':c) cont (l+1) +> '#':r -> \cont l -> lexReadClosingPragma r c cont l +> '"'{-"-}:r -> lexReadString r (\ str r' -> +> lexReadPragma r' ('"' : (reverse str) ++ '"' : c)) +> a: '\'':r | isAlphaNum a -> lexReadPragma r ('\'':a:c) +> '\'' :r -> lexReadSingleChar r (\ str r' -> +> lexReadPragma r' ((reverse str) ++ '\'' : c)) +> ch:r -> lexReadPragma r (ch:c) +> [] -> \_cont -> lexError "No closing '#-}' in code segment" [] + + +> lexReadClosingPragma :: String -> String -> (Token -> Pfunc a) -> Int -> ParseResult a +> lexReadClosingPragma s c = case s of +> '-':'}':r -> \cont -> cont (TokenInfo (cleanupCode (reverse c)) TokPragmaQuote) r +> '-':ch:r -> lexReadPragma r (ch:'-':'#':c) +> ch:r -> lexReadPragma r (ch:'#':c) +> [] -> \_cont -> lexError "No closing '#-}' in options pragma" [] + ---------------------------------------------------------------------------- Utilities that read the rest of a token. diff --git a/lib/frontend/src/Happy/Frontend/Parser.hs b/lib/frontend/src/Happy/Frontend/Parser.hs index 40c42584..68f1fc43 100644 --- a/lib/frontend/src/Happy/Frontend/Parser.hs +++ b/lib/frontend/src/Happy/Frontend/Parser.hs @@ -8,30 +8,33 @@ {-# LANGUAGE NoStrictData #-} {-# LANGUAGE UnboxedTuples #-} {-# LANGUAGE PartialTypeSignatures #-} +#if __GLASGOW_HASKELL__ >= 710 +{-# LANGUAGE PartialTypeSignatures #-} +#endif {-# OPTIONS_GHC -w #-} module Happy.Frontend.Parser (ourParser) where import Happy.Frontend.ParseMonad.Class import Happy.Frontend.ParseMonad import Happy.Frontend.AbsSyn import Happy.Frontend.Lexer -import qualified Control.Monad as Happy_Prelude +import qualified Data.Function as Happy_Prelude import qualified Data.Bool as Happy_Prelude import qualified Data.Function as Happy_Prelude -import qualified Data.Int as Happy_Prelude -import qualified Data.List as Happy_Prelude import qualified Data.Maybe as Happy_Prelude +import qualified Data.Int as Happy_Prelude import qualified Data.String as Happy_Prelude -import qualified Data.Tuple as Happy_Prelude -import qualified GHC.Err as Happy_Prelude -import qualified GHC.Num as Happy_Prelude +import qualified Data.List as Happy_Prelude +import qualified Control.Monad as Happy_Prelude import qualified Text.Show as Happy_Prelude +import qualified GHC.Num as Happy_Prelude +import qualified GHC.Err as Happy_Prelude import qualified Data.Array as Happy_Data_Array import qualified Data.Bits as Bits import qualified GHC.Exts as Happy_GHC_Exts import Control.Applicative(Applicative(..)) import Control.Monad (ap) --- parser produced by Happy Version 2.1.6 +-- parser produced by Happy Version 2.1.3 newtype HappyAbsSyn = HappyAbsSyn HappyAny #if __GLASGOW_HASKELL__ >= 607 @@ -179,6 +182,13 @@ happyIn24 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap24 x) happyOut24 :: (HappyAbsSyn ) -> HappyWrap24 happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x {-# INLINE happyOut24 #-} +newtype HappyWrap25 = HappyWrap25 (Maybe String) +happyIn25 :: (Maybe String) -> (HappyAbsSyn ) +happyIn25 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap25 x) +{-# INLINE happyIn25 #-} +happyOut25 :: (HappyAbsSyn ) -> HappyWrap25 +happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut25 #-} happyInTok :: (Token) -> (HappyAbsSyn ) happyInTok x = Happy_GHC_Exts.unsafeCoerce# x {-# INLINE happyInTok #-} @@ -188,24 +198,24 @@ happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x {-# NOINLINE happyTokenStrings #-} -happyTokenStrings = ["id","spec_tokentype","spec_token","spec_name","spec_partial","spec_lexer","spec_imported_identity","spec_monad","spec_nonassoc","spec_left","spec_right","spec_prec","spec_shift","spec_expect","spec_error","spec_errorexpected","spec_errorhandlertype","spec_attribute","spec_attributetype","code","int","\":\"","\";\"","\"::\"","\"%%\"","\"|\"","\"(\"","\")\"","\",\"","%eof"] +happyTokenStrings = ["id","spec_tokentype","spec_token","spec_name","spec_partial","spec_lexer","spec_imported_identity","spec_monad","spec_nonassoc","spec_left","spec_right","spec_prec","spec_shift","spec_expect","spec_error","spec_errorexpected","spec_errorhandlertype","spec_attribute","spec_attributetype","pragma","code","int","\":\"","\";\"","\"::\"","\"%%\"","\"|\"","\"(\"","\")\"","\",\"","%eof"] happyActOffsets :: HappyAddr -happyActOffsets = HappyA# "\x2f\x00\x00\x00\x2f\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x3b\x00\x00\x00\xfe\xff\xff\xff\x00\x00\x00\x00\x3d\x00\x00\x00\x4f\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x55\x00\x00\x00\x55\x00\x00\x00\x55\x00\x00\x00\x16\x00\x00\x00\x43\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x5f\x00\x00\x00\x5f\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x2c\x00\x00\x00\x64\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x65\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x68\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x00\x00\x5c\x00\x00\x00\x70\x00\x00\x00\x00\x00\x00\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# +happyActOffsets = HappyA# "\x03\x00\x00\x00\x03\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x1f\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\xfe\xff\xff\xff\x00\x00\x00\x00\x3d\x00\x00\x00\x42\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x56\x00\x00\x00\x56\x00\x00\x00\x56\x00\x00\x00\x16\x00\x00\x00\x43\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x60\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x2d\x00\x00\x00\x66\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x00\x00\x6b\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x70\x00\x00\x00\x5b\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# happyGotoOffsets :: HappyAddr -happyGotoOffsets = HappyA# "\x0c\x00\x00\x00\x66\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x6e\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# +happyGotoOffsets = HappyA# "\x0c\x00\x00\x00\x64\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x72\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x00\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# happyDefActions :: HappyAddr -happyDefActions = HappyA# "\xc7\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xc8\xff\xff\xff\x00\x00\x00\x00\xc7\xff\xff\xff\x00\x00\x00\x00\xe3\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\xff\xff\x00\x00\x00\x00\xc9\xff\xff\xff\xc9\xff\xff\xff\xc9\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd3\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\xff\xff\xff\x00\x00\x00\x00\xd2\xff\xff\xff\xc7\xff\xff\xff\xd5\xff\xff\xff\xd7\xff\xff\xff\xc9\xff\xff\xff\xd6\xff\xff\xff\xd8\xff\xff\xff\xdc\xff\xff\xff\x00\x00\x00\x00\xce\xff\xff\xff\xce\xff\xff\xff\xe1\xff\xff\xff\xcc\xff\xff\xff\x00\x00\x00\x00\xe2\xff\xff\xff\xe4\xff\xff\xff\x00\x00\x00\x00\xfe\xff\xff\xff\xfd\xff\xff\xff\xfb\xff\xff\xff\xf6\xff\xff\xff\xcb\xff\xff\xff\xcd\xff\xff\xff\xe0\xff\xff\xff\xcf\xff\xff\xff\xdf\xff\xff\xff\xdd\xff\xff\xff\xdb\xff\xff\xff\xca\xff\xff\xff\xd4\xff\xff\xff\xd0\xff\xff\xff\xda\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xff\xff\x00\x00\x00\x00\xf5\xff\xff\xff\xec\xff\xff\xff\x00\x00\x00\x00\xd9\xff\xff\xff\x00\x00\x00\x00\xf8\xff\xff\xff\xf2\xff\xff\xff\xeb\xff\xff\xff\xe5\xff\xff\xff\xed\xff\xff\xff\xef\xff\xff\xff\xf7\xff\xff\xff\x00\x00\x00\x00\xf4\xff\xff\xff\x00\x00\x00\x00\xea\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xe6\xff\xff\xff\xec\xff\xff\xff\x00\x00\x00\x00\xec\xff\xff\xff\xfa\xff\xff\xff\xec\xff\xff\xff\xf3\xff\xff\xff\xe7\xff\xff\xff\xf0\xff\xff\xff\xe9\xff\xff\xff\x00\x00\x00\x00\xee\xff\xff\xff\x00\x00\x00\x00\xf1\xff\xff\xff\xf9\xff\xff\xff\xe8\xff\xff\xff"# +happyDefActions = HappyA# "\xc5\xff\xff\xff\x00\x00\x00\x00\xc7\xff\xff\xff\xc6\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xc8\xff\xff\xff\xc7\xff\xff\xff\x00\x00\x00\x00\xe3\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\xff\xff\x00\x00\x00\x00\xc9\xff\xff\xff\xc9\xff\xff\xff\xc9\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd3\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\xff\xff\xff\x00\x00\x00\x00\xd2\xff\xff\xff\xc7\xff\xff\xff\xd5\xff\xff\xff\xd7\xff\xff\xff\xc9\xff\xff\xff\xd6\xff\xff\xff\xd8\xff\xff\xff\xdc\xff\xff\xff\x00\x00\x00\x00\xce\xff\xff\xff\xce\xff\xff\xff\xe1\xff\xff\xff\xcc\xff\xff\xff\x00\x00\x00\x00\xe2\xff\xff\xff\xe4\xff\xff\xff\x00\x00\x00\x00\xfe\xff\xff\xff\xfd\xff\xff\xff\xfb\xff\xff\xff\xf6\xff\xff\xff\xcb\xff\xff\xff\xcd\xff\xff\xff\xe0\xff\xff\xff\xcf\xff\xff\xff\xdf\xff\xff\xff\xdd\xff\xff\xff\xdb\xff\xff\xff\xca\xff\xff\xff\xd4\xff\xff\xff\xd0\xff\xff\xff\xda\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xff\xff\x00\x00\x00\x00\xf5\xff\xff\xff\xec\xff\xff\xff\x00\x00\x00\x00\xd9\xff\xff\xff\x00\x00\x00\x00\xf8\xff\xff\xff\xf2\xff\xff\xff\xeb\xff\xff\xff\xe5\xff\xff\xff\xed\xff\xff\xff\xef\xff\xff\xff\xf7\xff\xff\xff\x00\x00\x00\x00\xf4\xff\xff\xff\x00\x00\x00\x00\xea\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xe6\xff\xff\xff\xec\xff\xff\xff\x00\x00\x00\x00\xec\xff\xff\xff\xfa\xff\xff\xff\xec\xff\xff\xff\xf3\xff\xff\xff\xe7\xff\xff\xff\xf0\xff\xff\xff\xe9\xff\xff\xff\x00\x00\x00\x00\xee\xff\xff\xff\x00\x00\x00\x00\xf1\xff\xff\xff\xf9\xff\xff\xff\xe8\xff\xff\xff"# happyCheck :: HappyAddr -happyCheck = HappyA# "\xff\xff\xff\xff\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x13\x00\x00\x00\x14\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x1a\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x1f\x00\x00\x00\x13\x00\x00\x00\x17\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x01\x00\x00\x00\x16\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x13\x00\x00\x00\x14\x00\x00\x00\x08\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x0b\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x17\x00\x00\x00\x15\x00\x00\x00\x19\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x15\x00\x00\x00\x02\x00\x00\x00\x15\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x15\x00\x00\x00\x15\x00\x00\x00\x02\x00\x00\x00\x15\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x15\x00\x00\x00\x15\x00\x00\x00\x15\x00\x00\x00\x15\x00\x00\x00\x15\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x15\x00\x00\x00\x02\x00\x00\x00\x15\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x15\x00\x00\x00\x02\x00\x00\x00\x15\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x02\x00\x00\x00\x15\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x17\x00\x00\x00\x02\x00\x00\x00\x18\x00\x00\x00\x1c\x00\x00\x00\x0e\x00\x00\x00\x04\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x12\x00\x00\x00\xff\xff\xff\xff\x12\x00\x00\x00\xff\xff\xff\xff\x08\x00\x00\x00\x12\x00\x00\x00\x08\x00\x00\x00\x0f\x00\x00\x00\x13\x00\x00\x00\x12\x00\x00\x00\x0f\x00\x00\x00\x0c\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# +happyCheck = HappyA# "\xff\xff\xff\xff\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x13\x00\x00\x00\x14\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x15\x00\x00\x00\x1b\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x20\x00\x00\x00\x14\x00\x00\x00\x18\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x01\x00\x00\x00\x17\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x13\x00\x00\x00\x14\x00\x00\x00\x08\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x0b\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x02\x00\x00\x00\x18\x00\x00\x00\x16\x00\x00\x00\x1a\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x16\x00\x00\x00\x16\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x16\x00\x00\x00\x16\x00\x00\x00\x02\x00\x00\x00\x16\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x16\x00\x00\x00\x16\x00\x00\x00\x16\x00\x00\x00\x02\x00\x00\x00\x16\x00\x00\x00\x16\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x16\x00\x00\x00\x1d\x00\x00\x00\x16\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x16\x00\x00\x00\x16\x00\x00\x00\x1c\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x16\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x18\x00\x00\x00\x1d\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x0e\x00\x00\x00\x12\x00\x00\x00\x04\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x12\x00\x00\x00\x0c\x00\x00\x00\x0f\x00\x00\x00\x12\x00\x00\x00\x12\x00\x00\x00\x0f\x00\x00\x00\x08\x00\x00\x00\x08\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# happyTable :: HappyAddr -happyTable = HappyA# "\x00\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x53\x00\x00\x00\x04\x00\x00\x00\x13\x00\x00\x00\x14\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x2b\x00\x00\x00\x56\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\xff\xff\xff\xff\x02\x00\x00\x00\x54\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x05\x00\x00\x00\x1d\x00\x00\x00\x13\x00\x00\x00\x14\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x59\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x5a\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x54\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x5e\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x40\x00\x00\x00\x04\x00\x00\x00\x41\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x5c\x00\x00\x00\x5d\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x30\x00\x00\x00\x26\x00\x00\x00\x04\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x25\x00\x00\x00\x24\x00\x00\x00\x23\x00\x00\x00\x22\x00\x00\x00\x1f\x00\x00\x00\x1c\x00\x00\x00\x1b\x00\x00\x00\x1a\x00\x00\x00\x1f\x00\x00\x00\x19\x00\x00\x00\x39\x00\x00\x00\x04\x00\x00\x00\x36\x00\x00\x00\x35\x00\x00\x00\x33\x00\x00\x00\x28\x00\x00\x00\x30\x00\x00\x00\x2f\x00\x00\x00\x3a\x00\x00\x00\x3f\x00\x00\x00\x49\x00\x00\x00\x3c\x00\x00\x00\x42\x00\x00\x00\x49\x00\x00\x00\x43\x00\x00\x00\x4c\x00\x00\x00\x49\x00\x00\x00\x52\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x49\x00\x00\x00\x49\x00\x00\x00\x56\x00\x00\x00\x49\x00\x00\x00\x5e\x00\x00\x00\x4d\x00\x00\x00\x29\x00\x00\x00\x3a\x00\x00\x00\x02\x00\x00\x00\x2b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x1d\x00\x00\x00\x5f\x00\x00\x00\x33\x00\x00\x00\x37\x00\x00\x00\x36\x00\x00\x00\x31\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# +happyTable = HappyA# "\x00\x00\x00\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x13\x00\x00\x00\x14\x00\x00\x00\x55\x00\x00\x00\x04\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x04\x00\x00\x00\x2d\x00\x00\x00\x58\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\xff\xff\xff\xff\x02\x00\x00\x00\x56\x00\x00\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x13\x00\x00\x00\x14\x00\x00\x00\x07\x00\x00\x00\x1f\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x5b\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x5c\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x56\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x60\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x2a\x00\x00\x00\x42\x00\x00\x00\x07\x00\x00\x00\x43\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x32\x00\x00\x00\x28\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x07\x00\x00\x00\x2b\x00\x00\x00\x27\x00\x00\x00\x26\x00\x00\x00\x25\x00\x00\x00\x24\x00\x00\x00\x21\x00\x00\x00\x1e\x00\x00\x00\x1d\x00\x00\x00\x1c\x00\x00\x00\x1b\x00\x00\x00\x3b\x00\x00\x00\x07\x00\x00\x00\x21\x00\x00\x00\x38\x00\x00\x00\x37\x00\x00\x00\x35\x00\x00\x00\x2a\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x3e\x00\x00\x00\x3c\x00\x00\x00\x41\x00\x00\x00\x4b\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x54\x00\x00\x00\x4b\x00\x00\x00\x4e\x00\x00\x00\x4b\x00\x00\x00\x5b\x00\x00\x00\x5a\x00\x00\x00\x4b\x00\x00\x00\x58\x00\x00\x00\x4f\x00\x00\x00\x4b\x00\x00\x00\x4b\x00\x00\x00\x60\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x2d\x00\x00\x00\x39\x00\x00\x00\x3e\x00\x00\x00\x2b\x00\x00\x00\x22\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x21\x00\x00\x00\x50\x00\x00\x00\x35\x00\x00\x00\x1f\x00\x00\x00\x38\x00\x00\x00\x33\x00\x00\x00\x4f\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# -happyReduceArr = Happy_Data_Array.array (1, 56) [ +happyReduceArr = Happy_Data_Array.array (1, 58) [ (1 , happyReduce_1), (2 , happyReduce_2), (3 , happyReduce_3), @@ -261,39 +271,44 @@ happyReduceArr = Happy_Data_Array.array (1, 56) [ (53 , happyReduce_53), (54 , happyReduce_54), (55 , happyReduce_55), - (56 , happyReduce_56) + (56 , happyReduce_56), + (57 , happyReduce_57), + (58 , happyReduce_58) ] happyRuleArr :: HappyAddr -happyRuleArr = HappyA# "\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x03\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x04\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x08\x00\x00\x00\x01\x00\x00\x00\x08\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x01\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x01\x00\x00\x00\x0a\x00\x00\x00\x02\x00\x00\x00\x0b\x00\x00\x00\x01\x00\x00\x00\x0b\x00\x00\x00\x03\x00\x00\x00\x0c\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x02\x00\x00\x00\x0d\x00\x00\x00\x01\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x03\x00\x00\x00\x0e\x00\x00\x00\x03\x00\x00\x00\x0e\x00\x00\x00\x01\x00\x00\x00\x0e\x00\x00\x00\x03\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x03\x00\x00\x00\x0e\x00\x00\x00\x04\x00\x00\x00\x0e\x00\x00\x00\x05\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x03\x00\x00\x00\x0e\x00\x00\x00\x01\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x03\x00\x00\x00\x0f\x00\x00\x00\x01\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00\x12\x00\x00\x00\x02\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00"# +happyRuleArr = HappyA# "\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x03\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x04\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x08\x00\x00\x00\x01\x00\x00\x00\x08\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x01\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x01\x00\x00\x00\x0a\x00\x00\x00\x02\x00\x00\x00\x0b\x00\x00\x00\x01\x00\x00\x00\x0b\x00\x00\x00\x03\x00\x00\x00\x0c\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x02\x00\x00\x00\x0d\x00\x00\x00\x01\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x03\x00\x00\x00\x0e\x00\x00\x00\x03\x00\x00\x00\x0e\x00\x00\x00\x01\x00\x00\x00\x0e\x00\x00\x00\x03\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x03\x00\x00\x00\x0e\x00\x00\x00\x04\x00\x00\x00\x0e\x00\x00\x00\x05\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x03\x00\x00\x00\x0e\x00\x00\x00\x01\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x03\x00\x00\x00\x0f\x00\x00\x00\x01\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00\x12\x00\x00\x00\x02\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x01\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00"# happyCatchStates :: [Happy_Prelude.Int] happyCatchStates = [] -happy_n_terms = 32 :: Happy_Prelude.Int -happy_n_nonterms = 20 :: Happy_Prelude.Int +happy_n_terms = 33 :: Happy_Prelude.Int +happy_n_nonterms = 21 :: Happy_Prelude.Int happy_n_starts = 1 :: Happy_Prelude.Int happyReduce_1 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) -happyReduce_1 = happySpecReduce_3 0# happyReduction_1 -happyReduction_1 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut24 happy_x_1 of { (HappyWrap24 happy_var_1) -> - case happyOut6 happy_x_2 of { (HappyWrap6 happy_var_2) -> - case happyOut24 happy_x_3 of { (HappyWrap24 happy_var_3) -> +happyReduce_1 = happyReduce 4# 0# happyReduction_1 +happyReduction_1 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut25 happy_x_1 of { (HappyWrap25 happy_var_1) -> + case happyOut24 happy_x_2 of { (HappyWrap24 happy_var_2) -> + case happyOut6 happy_x_3 of { (HappyWrap6 happy_var_3) -> + case happyOut24 happy_x_4 of { (HappyWrap24 happy_var_4) -> happyIn5 - (BookendedAbsSyn happy_var_1 happy_var_2 happy_var_3 - )}}} + (BookendedAbsSyn happy_var_1 happy_var_2 happy_var_3 happy_var_4 + ) `HappyStk` happyRest}}}} happyReduce_2 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) happyReduce_2 = happySpecReduce_3 1# happyReduction_2 happyReduction_2 happy_x_3 happy_x_2 happy_x_1 - = case happyOut18 happy_x_1 of { (HappyWrap18 happy_var_1) -> - case happyOut7 happy_x_3 of { (HappyWrap7 happy_var_3) -> + = case happyOut18 happy_x_1 of { (HappyWrap18 happy_var_1) -> + case happyOut7 happy_x_3 of { (HappyWrap7 happy_var_3) -> happyIn6 (AbsSyn (reverse happy_var_1) (reverse happy_var_3) )}} @@ -302,8 +317,8 @@ happyReduce_3 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Ha happyReduce_3 = happySpecReduce_2 2# happyReduction_3 happyReduction_3 happy_x_2 happy_x_1 - = case happyOut7 happy_x_1 of { (HappyWrap7 happy_var_1) -> - case happyOut8 happy_x_2 of { (HappyWrap8 happy_var_2) -> + = case happyOut7 happy_x_1 of { (HappyWrap7 happy_var_1) -> + case happyOut8 happy_x_2 of { (HappyWrap8 happy_var_2) -> happyIn7 (happy_var_2 : happy_var_1 )}} @@ -311,7 +326,7 @@ happyReduction_3 happy_x_2 happyReduce_4 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) happyReduce_4 = happySpecReduce_1 2# happyReduction_4 happyReduction_4 happy_x_1 - = case happyOut8 happy_x_1 of { (HappyWrap8 happy_var_1) -> + = case happyOut8 happy_x_1 of { (HappyWrap8 happy_var_1) -> happyIn7 ([happy_var_1] )} @@ -325,10 +340,10 @@ happyReduction_5 (happy_x_6 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk` happyRest) - = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> - case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> - case happyOutTok happy_x_4 of { (TokenInfo happy_var_4 TokCodeQuote) -> - case happyOut11 happy_x_6 of { (HappyWrap11 happy_var_6) -> + = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> + case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> + case happyOutTok happy_x_4 of { (TokenInfo happy_var_4 TokCodeQuote) -> + case happyOut11 happy_x_6 of { (HappyWrap11 happy_var_6) -> happyIn8 (Rule happy_var_1 happy_var_2 happy_var_6 (Just happy_var_4) ) `HappyStk` happyRest}}}} @@ -343,10 +358,10 @@ happyReduction_6 (happy_x_7 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk` happyRest) - = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> - case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> - case happyOutTok happy_x_4 of { (TokenInfo happy_var_4 TokCodeQuote) -> - case happyOut11 happy_x_7 of { (HappyWrap11 happy_var_7) -> + = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> + case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> + case happyOutTok happy_x_4 of { (TokenInfo happy_var_4 TokCodeQuote) -> + case happyOut11 happy_x_7 of { (HappyWrap11 happy_var_7) -> happyIn8 (Rule happy_var_1 happy_var_2 happy_var_7 (Just happy_var_4) ) `HappyStk` happyRest}}}} @@ -358,9 +373,9 @@ happyReduction_7 (happy_x_4 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk` happyRest) - = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> - case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> - case happyOut11 happy_x_4 of { (HappyWrap11 happy_var_4) -> + = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> + case happyOut9 happy_x_2 of { (HappyWrap9 happy_var_2) -> + case happyOut11 happy_x_4 of { (HappyWrap11 happy_var_4) -> happyIn8 (Rule happy_var_1 happy_var_2 happy_var_4 Nothing ) `HappyStk` happyRest}}} @@ -370,7 +385,7 @@ happyReduce_8 = happySpecReduce_3 4# happyReduction_8 happyReduction_8 happy_x_3 happy_x_2 happy_x_1 - = case happyOut10 happy_x_2 of { (HappyWrap10 happy_var_2) -> + = case happyOut10 happy_x_2 of { (HappyWrap10 happy_var_2) -> happyIn9 (reverse happy_var_2 )} @@ -384,7 +399,7 @@ happyReduction_9 = happyIn9 happyReduce_10 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) happyReduce_10 = happySpecReduce_1 5# happyReduction_10 happyReduction_10 happy_x_1 - = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> + = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> happyIn10 ([happy_var_1] )} @@ -394,8 +409,8 @@ happyReduce_11 = happySpecReduce_3 5# happyReduction_11 happyReduction_11 happy_x_3 happy_x_2 happy_x_1 - = case happyOut10 happy_x_1 of { (HappyWrap10 happy_var_1) -> - case happyOutTok happy_x_3 of { (TokenInfo happy_var_3 TokId) -> + = case happyOut10 happy_x_1 of { (HappyWrap10 happy_var_1) -> + case happyOutTok happy_x_3 of { (TokenInfo happy_var_3 TokId) -> happyIn10 (happy_var_3 : happy_var_1 )}} @@ -405,8 +420,8 @@ happyReduce_12 = happySpecReduce_3 6# happyReduction_12 happyReduction_12 happy_x_3 happy_x_2 happy_x_1 - = case happyOut12 happy_x_1 of { (HappyWrap12 happy_var_1) -> - case happyOut11 happy_x_3 of { (HappyWrap11 happy_var_3) -> + = case happyOut12 happy_x_1 of { (HappyWrap12 happy_var_1) -> + case happyOut11 happy_x_3 of { (HappyWrap11 happy_var_3) -> happyIn11 (happy_var_1 : happy_var_3 )}} @@ -414,7 +429,7 @@ happyReduction_12 happy_x_3 happyReduce_13 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) happyReduce_13 = happySpecReduce_1 6# happyReduction_13 happyReduction_13 happy_x_1 - = case happyOut12 happy_x_1 of { (HappyWrap12 happy_var_1) -> + = case happyOut12 happy_x_1 of { (HappyWrap12 happy_var_1) -> happyIn11 ([happy_var_1] )} @@ -426,9 +441,9 @@ happyReduction_14 (happy_x_4 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk` happyRest) tk - = happyThen ((case happyOut14 happy_x_1 of { (HappyWrap14 happy_var_1) -> - case happyOut17 happy_x_2 of { (HappyWrap17 happy_var_2) -> - case happyOutTok happy_x_3 of { (TokenInfo happy_var_3 TokCodeQuote) -> + = happyThen ((case happyOut14 happy_x_1 of { (HappyWrap14 happy_var_1) -> + case happyOut17 happy_x_2 of { (HappyWrap17 happy_var_2) -> + case happyOutTok happy_x_3 of { (TokenInfo happy_var_3 TokCodeQuote) -> ( lineP >>= \l -> return (Prod happy_var_1 happy_var_3 l happy_var_2))}}}) ) (\r -> happyReturn (happyIn12 r)) @@ -438,16 +453,16 @@ happyReduction_15 (happy_x_3 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk` happyRest) tk - = happyThen ((case happyOut14 happy_x_1 of { (HappyWrap14 happy_var_1) -> - case happyOut17 happy_x_2 of { (HappyWrap17 happy_var_2) -> - case happyOutTok happy_x_3 of { (TokenInfo happy_var_3 TokCodeQuote) -> + = happyThen ((case happyOut14 happy_x_1 of { (HappyWrap14 happy_var_1) -> + case happyOut17 happy_x_2 of { (HappyWrap17 happy_var_2) -> + case happyOutTok happy_x_3 of { (TokenInfo happy_var_3 TokCodeQuote) -> ( lineP >>= \l -> return (Prod happy_var_1 happy_var_3 l happy_var_2))}}}) ) (\r -> happyReturn (happyIn12 r)) happyReduce_16 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) happyReduce_16 = happySpecReduce_1 8# happyReduction_16 happyReduction_16 happy_x_1 - = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> + = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> happyIn13 (App happy_var_1 [] )} @@ -459,8 +474,8 @@ happyReduction_17 (happy_x_4 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk` happyRest) - = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> - case happyOut16 happy_x_3 of { (HappyWrap16 happy_var_3) -> + = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> + case happyOut16 happy_x_3 of { (HappyWrap16 happy_var_3) -> happyIn13 (App happy_var_1 (reverse happy_var_3) ) `HappyStk` happyRest}} @@ -468,7 +483,7 @@ happyReduction_17 (happy_x_4 `HappyStk` happyReduce_18 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) happyReduce_18 = happySpecReduce_1 9# happyReduction_18 happyReduction_18 happy_x_1 - = case happyOut15 happy_x_1 of { (HappyWrap15 happy_var_1) -> + = case happyOut15 happy_x_1 of { (HappyWrap15 happy_var_1) -> happyIn14 (reverse happy_var_1 )} @@ -482,7 +497,7 @@ happyReduction_19 = happyIn14 happyReduce_20 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) happyReduce_20 = happySpecReduce_1 10# happyReduction_20 happyReduction_20 happy_x_1 - = case happyOut13 happy_x_1 of { (HappyWrap13 happy_var_1) -> + = case happyOut13 happy_x_1 of { (HappyWrap13 happy_var_1) -> happyIn15 ([happy_var_1] )} @@ -491,8 +506,8 @@ happyReduce_21 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> H happyReduce_21 = happySpecReduce_2 10# happyReduction_21 happyReduction_21 happy_x_2 happy_x_1 - = case happyOut15 happy_x_1 of { (HappyWrap15 happy_var_1) -> - case happyOut13 happy_x_2 of { (HappyWrap13 happy_var_2) -> + = case happyOut15 happy_x_1 of { (HappyWrap15 happy_var_1) -> + case happyOut13 happy_x_2 of { (HappyWrap13 happy_var_2) -> happyIn15 (happy_var_2 : happy_var_1 )}} @@ -500,7 +515,7 @@ happyReduction_21 happy_x_2 happyReduce_22 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) happyReduce_22 = happySpecReduce_1 11# happyReduction_22 happyReduction_22 happy_x_1 - = case happyOut13 happy_x_1 of { (HappyWrap13 happy_var_1) -> + = case happyOut13 happy_x_1 of { (HappyWrap13 happy_var_1) -> happyIn16 ([happy_var_1] )} @@ -510,8 +525,8 @@ happyReduce_23 = happySpecReduce_3 11# happyReduction_23 happyReduction_23 happy_x_3 happy_x_2 happy_x_1 - = case happyOut16 happy_x_1 of { (HappyWrap16 happy_var_1) -> - case happyOut13 happy_x_3 of { (HappyWrap13 happy_var_3) -> + = case happyOut16 happy_x_1 of { (HappyWrap16 happy_var_1) -> + case happyOut13 happy_x_3 of { (HappyWrap13 happy_var_3) -> happyIn16 (happy_var_3 : happy_var_1 )}} @@ -520,7 +535,7 @@ happyReduce_24 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> H happyReduce_24 = happySpecReduce_2 12# happyReduction_24 happyReduction_24 happy_x_2 happy_x_1 - = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokId) -> + = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokId) -> happyIn17 (PrecId happy_var_2 )} @@ -542,8 +557,8 @@ happyReduce_27 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> H happyReduce_27 = happySpecReduce_2 13# happyReduction_27 happyReduction_27 happy_x_2 happy_x_1 - = case happyOut18 happy_x_1 of { (HappyWrap18 happy_var_1) -> - case happyOut19 happy_x_2 of { (HappyWrap19 happy_var_2) -> + = case happyOut18 happy_x_1 of { (HappyWrap18 happy_var_1) -> + case happyOut19 happy_x_2 of { (HappyWrap19 happy_var_2) -> happyIn18 (happy_var_2 : happy_var_1 )}} @@ -551,7 +566,7 @@ happyReduction_27 happy_x_2 happyReduce_28 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) happyReduce_28 = happySpecReduce_1 13# happyReduction_28 happyReduction_28 happy_x_1 - = case happyOut19 happy_x_1 of { (HappyWrap19 happy_var_1) -> + = case happyOut19 happy_x_1 of { (HappyWrap19 happy_var_1) -> happyIn18 ([happy_var_1] )} @@ -560,7 +575,7 @@ happyReduce_29 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> H happyReduce_29 = happySpecReduce_2 14# happyReduction_29 happyReduction_29 happy_x_2 happy_x_1 - = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> + = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> happyIn19 (TokenType happy_var_2 )} @@ -569,7 +584,7 @@ happyReduce_30 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> H happyReduce_30 = happySpecReduce_2 14# happyReduction_30 happyReduction_30 happy_x_2 happy_x_1 - = case happyOut21 happy_x_2 of { (HappyWrap21 happy_var_2) -> + = case happyOut21 happy_x_2 of { (HappyWrap21 happy_var_2) -> happyIn19 (TokenSpec happy_var_2 )} @@ -579,8 +594,8 @@ happyReduce_31 = happySpecReduce_3 14# happyReduction_31 happyReduction_31 happy_x_3 happy_x_2 happy_x_1 - = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokId) -> - case happyOut20 happy_x_3 of { (HappyWrap20 happy_var_3) -> + = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokId) -> + case happyOut20 happy_x_3 of { (HappyWrap20 happy_var_3) -> happyIn19 (TokenName happy_var_2 happy_var_3 False )}} @@ -590,8 +605,8 @@ happyReduce_32 = happySpecReduce_3 14# happyReduction_32 happyReduction_32 happy_x_3 happy_x_2 happy_x_1 - = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokId) -> - case happyOut20 happy_x_3 of { (HappyWrap20 happy_var_3) -> + = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokId) -> + case happyOut20 happy_x_3 of { (HappyWrap20 happy_var_3) -> happyIn19 (TokenName happy_var_2 happy_var_3 True )}} @@ -608,8 +623,8 @@ happyReduce_34 = happySpecReduce_3 14# happyReduction_34 happyReduction_34 happy_x_3 happy_x_2 happy_x_1 - = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> - case happyOutTok happy_x_3 of { (TokenInfo happy_var_3 TokCodeQuote) -> + = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> + case happyOutTok happy_x_3 of { (TokenInfo happy_var_3 TokCodeQuote) -> happyIn19 (TokenLexer happy_var_2 happy_var_3 )}} @@ -618,7 +633,7 @@ happyReduce_35 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> H happyReduce_35 = happySpecReduce_2 14# happyReduction_35 happyReduction_35 happy_x_2 happy_x_1 - = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> + = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> happyIn19 (TokenMonad "()" happy_var_2 "Happy_Prelude.>>=" "Happy_Prelude.return" )} @@ -628,8 +643,8 @@ happyReduce_36 = happySpecReduce_3 14# happyReduction_36 happyReduction_36 happy_x_3 happy_x_2 happy_x_1 - = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> - case happyOutTok happy_x_3 of { (TokenInfo happy_var_3 TokCodeQuote) -> + = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> + case happyOutTok happy_x_3 of { (TokenInfo happy_var_3 TokCodeQuote) -> happyIn19 (TokenMonad happy_var_2 happy_var_3 "Happy_Prelude.>>=" "Happy_Prelude.return" )}} @@ -641,9 +656,9 @@ happyReduction_37 (happy_x_4 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk` happyRest) - = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> - case happyOutTok happy_x_3 of { (TokenInfo happy_var_3 TokCodeQuote) -> - case happyOutTok happy_x_4 of { (TokenInfo happy_var_4 TokCodeQuote) -> + = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> + case happyOutTok happy_x_3 of { (TokenInfo happy_var_3 TokCodeQuote) -> + case happyOutTok happy_x_4 of { (TokenInfo happy_var_4 TokCodeQuote) -> happyIn19 (TokenMonad "()" happy_var_2 happy_var_3 happy_var_4 ) `HappyStk` happyRest}}} @@ -656,10 +671,10 @@ happyReduction_38 (happy_x_5 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk` happyRest) - = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> - case happyOutTok happy_x_3 of { (TokenInfo happy_var_3 TokCodeQuote) -> - case happyOutTok happy_x_4 of { (TokenInfo happy_var_4 TokCodeQuote) -> - case happyOutTok happy_x_5 of { (TokenInfo happy_var_5 TokCodeQuote) -> + = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> + case happyOutTok happy_x_3 of { (TokenInfo happy_var_3 TokCodeQuote) -> + case happyOutTok happy_x_4 of { (TokenInfo happy_var_4 TokCodeQuote) -> + case happyOutTok happy_x_5 of { (TokenInfo happy_var_5 TokCodeQuote) -> happyIn19 (TokenMonad happy_var_2 happy_var_3 happy_var_4 happy_var_5 ) `HappyStk` happyRest}}}} @@ -668,7 +683,7 @@ happyReduce_39 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> H happyReduce_39 = happySpecReduce_2 14# happyReduction_39 happyReduction_39 happy_x_2 happy_x_1 - = case happyOut23 happy_x_2 of { (HappyWrap23 happy_var_2) -> + = case happyOut23 happy_x_2 of { (HappyWrap23 happy_var_2) -> happyIn19 (TokenNonassoc happy_var_2 )} @@ -677,7 +692,7 @@ happyReduce_40 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> H happyReduce_40 = happySpecReduce_2 14# happyReduction_40 happyReduction_40 happy_x_2 happy_x_1 - = case happyOut23 happy_x_2 of { (HappyWrap23 happy_var_2) -> + = case happyOut23 happy_x_2 of { (HappyWrap23 happy_var_2) -> happyIn19 (TokenRight happy_var_2 )} @@ -686,7 +701,7 @@ happyReduce_41 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> H happyReduce_41 = happySpecReduce_2 14# happyReduction_41 happyReduction_41 happy_x_2 happy_x_1 - = case happyOut23 happy_x_2 of { (HappyWrap23 happy_var_2) -> + = case happyOut23 happy_x_2 of { (HappyWrap23 happy_var_2) -> happyIn19 (TokenLeft happy_var_2 )} @@ -695,7 +710,7 @@ happyReduce_42 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> H happyReduce_42 = happySpecReduce_2 14# happyReduction_42 happyReduction_42 happy_x_2 happy_x_1 - = case happyOutTok happy_x_2 of { (TokenNum happy_var_2 TokNum) -> + = case happyOutTok happy_x_2 of { (TokenNum happy_var_2 TokNum) -> happyIn19 (TokenExpect happy_var_2 )} @@ -705,8 +720,8 @@ happyReduce_43 = happySpecReduce_3 14# happyReduction_43 happyReduction_43 happy_x_3 happy_x_2 happy_x_1 - = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> - case happyOut24 happy_x_3 of { (HappyWrap24 happy_var_3) -> + = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> + case happyOut24 happy_x_3 of { (HappyWrap24 happy_var_3) -> happyIn19 (TokenError happy_var_2 happy_var_3 )}} @@ -722,7 +737,7 @@ happyReduce_45 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> H happyReduce_45 = happySpecReduce_2 14# happyReduction_45 happyReduction_45 happy_x_2 happy_x_1 - = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokId) -> + = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokId) -> happyIn19 (TokenErrorHandlerType happy_var_2 )} @@ -731,7 +746,7 @@ happyReduce_46 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> H happyReduce_46 = happySpecReduce_2 14# happyReduction_46 happyReduction_46 happy_x_2 happy_x_1 - = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> + = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> happyIn19 (TokenAttributetype happy_var_2 )} @@ -741,8 +756,8 @@ happyReduce_47 = happySpecReduce_3 14# happyReduction_47 happyReduction_47 happy_x_3 happy_x_2 happy_x_1 - = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokId) -> - case happyOutTok happy_x_3 of { (TokenInfo happy_var_3 TokCodeQuote) -> + = case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokId) -> + case happyOutTok happy_x_3 of { (TokenInfo happy_var_3 TokCodeQuote) -> happyIn19 (TokenAttribute happy_var_2 happy_var_3 )}} @@ -750,7 +765,7 @@ happyReduction_47 happy_x_3 happyReduce_48 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) happyReduce_48 = happySpecReduce_1 15# happyReduction_48 happyReduction_48 happy_x_1 - = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> + = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> happyIn20 (Just happy_var_1 )} @@ -765,8 +780,8 @@ happyReduce_50 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> H happyReduce_50 = happySpecReduce_2 16# happyReduction_50 happyReduction_50 happy_x_2 happy_x_1 - = case happyOut22 happy_x_1 of { (HappyWrap22 happy_var_1) -> - case happyOut21 happy_x_2 of { (HappyWrap21 happy_var_2) -> + = case happyOut22 happy_x_1 of { (HappyWrap22 happy_var_1) -> + case happyOut21 happy_x_2 of { (HappyWrap21 happy_var_2) -> happyIn21 (happy_var_1:happy_var_2 )}} @@ -774,7 +789,7 @@ happyReduction_50 happy_x_2 happyReduce_51 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) happyReduce_51 = happySpecReduce_1 16# happyReduction_51 happyReduction_51 happy_x_1 - = case happyOut22 happy_x_1 of { (HappyWrap22 happy_var_1) -> + = case happyOut22 happy_x_1 of { (HappyWrap22 happy_var_1) -> happyIn21 ([happy_var_1] )} @@ -783,8 +798,8 @@ happyReduce_52 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> H happyReduce_52 = happySpecReduce_2 17# happyReduction_52 happyReduction_52 happy_x_2 happy_x_1 - = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> - case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> + = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> + case happyOutTok happy_x_2 of { (TokenInfo happy_var_2 TokCodeQuote) -> happyIn22 ((happy_var_1, parseTokenSpec happy_var_2) )}} @@ -793,8 +808,8 @@ happyReduce_53 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> H happyReduce_53 = happySpecReduce_2 18# happyReduction_53 happyReduction_53 happy_x_2 happy_x_1 - = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> - case happyOut23 happy_x_2 of { (HappyWrap23 happy_var_2) -> + = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokId) -> + case happyOut23 happy_x_2 of { (HappyWrap23 happy_var_2) -> happyIn23 (happy_var_1 : happy_var_2 )}} @@ -808,7 +823,7 @@ happyReduction_54 = happyIn23 happyReduce_55 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) happyReduce_55 = happySpecReduce_1 19# happyReduction_55 happyReduction_55 happy_x_1 - = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokCodeQuote) -> + = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokCodeQuote) -> happyIn24 (Just happy_var_1 )} @@ -819,8 +834,22 @@ happyReduction_56 = happyIn24 (Nothing ) +happyReduce_57 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) +happyReduce_57 = happySpecReduce_1 20# happyReduction_57 +happyReduction_57 happy_x_1 + = case happyOutTok happy_x_1 of { (TokenInfo happy_var_1 TokPragmaQuote) -> + happyIn25 + (Just happy_var_1 + )} + +happyReduce_58 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> P (HappyAbsSyn ) +happyReduce_58 = happySpecReduce_0 20# happyReduction_58 +happyReduction_58 = happyIn25 + (Nothing + ) + happyTerminalToTok term = case term of { - TokenEOF -> 31#; + TokenEOF -> 32#; TokenInfo happy_dollar_dollar TokId -> 2#; TokenKW TokSpecId_TokenType -> 3#; TokenKW TokSpecId_Token -> 4#; @@ -840,16 +869,17 @@ happyTerminalToTok term = case term of { TokenKW TokSpecId_ErrorHandlerType -> 18#; TokenKW TokSpecId_Attribute -> 19#; TokenKW TokSpecId_Attributetype -> 20#; - TokenInfo happy_dollar_dollar TokCodeQuote -> 21#; - TokenNum happy_dollar_dollar TokNum -> 22#; - TokenKW TokColon -> 23#; - TokenKW TokSemiColon -> 24#; - TokenKW TokDoubleColon -> 25#; - TokenKW TokDoublePercent -> 26#; - TokenKW TokBar -> 27#; - TokenKW TokParenL -> 28#; - TokenKW TokParenR -> 29#; - TokenKW TokComma -> 30#; + TokenInfo happy_dollar_dollar TokPragmaQuote -> 21#; + TokenInfo happy_dollar_dollar TokCodeQuote -> 22#; + TokenNum happy_dollar_dollar TokNum -> 23#; + TokenKW TokColon -> 24#; + TokenKW TokSemiColon -> 25#; + TokenKW TokDoubleColon -> 26#; + TokenKW TokDoublePercent -> 27#; + TokenKW TokBar -> 28#; + TokenKW TokParenL -> 29#; + TokenKW TokParenR -> 30#; + TokenKW TokComma -> 31#; _ -> -1#; } {-# NOINLINE happyTerminalToTok #-} @@ -859,9 +889,9 @@ happyLex kend kmore = lexTokenP (\tk -> case tk of { _ -> kmore (happyTerminalToTok tk) tk }) {-# INLINE happyLex #-} -happyNewToken action sts stk = happyLex (\tk -> happyDoAction 31# tk action sts stk) (\i tk -> happyDoAction i tk action sts stk) +happyNewToken action sts stk = happyLex (\tk -> happyDoAction 32# tk action sts stk) (\i tk -> happyDoAction i tk action sts stk) -happyReport 31# = happyReport' +happyReport 32# = happyReport' happyReport _ = happyReport' From 379edef66947a72f92d840160714d205e728a21f Mon Sep 17 00:00:00 2001 From: Reed Mullanix Date: Tue, 5 Aug 2025 18:29:00 -0400 Subject: [PATCH 3/7] Use options from OPTIONS_HAPPY pragma --- app/Main.lhs | 75 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 30 deletions(-) diff --git a/app/Main.lhs b/app/Main.lhs index 9f43b7bd..762e2b99 100644 --- a/app/Main.lhs +++ b/app/Main.lhs @@ -28,6 +28,7 @@ Path settings auto-generated by Cabal: > import System.Environment > import System.Exit (exitWith, ExitCode(..)) > import Data.Char +> import Data.List ( union ) > import System.IO > import Data.List( isSuffixOf ) > import Data.Version ( showVersion ) @@ -61,12 +62,7 @@ Read and parse the CLI arguments. > usageInfo (usageHeader prog) argInfo) > where -> runParserGen cli fl_name = do - -If no -g flag has been passed, show a warning. - -> unless (OptGhcTarget `elem` cli) $ -> hPutStrLn stderr "Warning: With happy 2.0, the --ghc flag has become non-optional. To suppress this warning, pass the --ghc flag." +> runParserGen cliOpts fl_name = do Open the file. @@ -78,19 +74,38 @@ Open the file. Parse, using bootstrapping parser. -> (BookendedAbsSyn hd abssyn tl) <- case parseYFileContents file of +> (BookendedAbsSyn pragma hd abssyn tl) <- case parseYFileContents file of > Left err -> die (fl_name ++ ':' : err) > Right bas -> return bas +Combine options set via OPTIONS_HAPPY with those provided via the CLI. + +> opts <- +> case pragma of +> Just happyPragma -> do +> let (pragmaName, pragmaArgs) = break isSpace happyPragma +> when (pragmaName /= "OPTIONS_HAPPY") $ +> die ("Unknown happy pragma '" ++ pragmaName ++ "', expected OPTIONS_HAPPY") +> case getOpt Permute argInfo (words pragmaArgs) of +> (pragmaOpts,_,[]) -> return (union pragmaOpts cliOpts) +> (_,_,errors) -> die ("Invalid options in OPTIONS_HAPPY: " ++ concat errors) +> Nothing -> return cliOpts + +If no -g flag has been passed, show a warning. + +> unless (OptGhcTarget `elem` opts) $ +> hPutStrLn stderr "Warning: With happy 2.0, the --ghc flag has become non-optional. To suppress this warning, pass the --ghc flag." + + Mangle the syntax into something useful. > (g, mAg, common_options) <- case {-# SCC "Mangler" #-} mangler fl_name abssyn of > Left s -> die (unlines s ++ "\n") > Right gd -> return gd -> optPrint cli DumpMangle $ putStr $ show g +> optPrint opts DumpMangle $ putStr $ show g -> let select_reductions | OptGLR `elem` cli = select_all_reductions +> let select_reductions | OptGLR `elem` opts = select_all_reductions > | otherwise = select_first_reduction > let tables = genTables select_reductions g @@ -103,11 +118,11 @@ Mangle the syntax into something useful. Debug output -> optPrint cli DumpLR0 $ putStr $ show sets -> optPrint cli DumpAction $ putStr $ show action -> optPrint cli DumpGoto $ putStr $ show goto -> optPrint cli DumpLA $ putStr $ show lainfo -> optPrint cli DumpLA $ putStr $ show la +> optPrint opts DumpLR0 $ putStr $ show sets +> optPrint opts DumpAction $ putStr $ show action +> optPrint opts DumpGoto $ putStr $ show goto +> optPrint opts DumpLA $ putStr $ show lainfo +> optPrint opts DumpLA $ putStr $ show la Report any unused rules and terminals @@ -119,7 +134,7 @@ Report any unused rules and terminals Print out the info file. -> info_filename <- getInfoFileName name cli +> info_filename <- getInfoFileName name opts > let info = genInfoFile > (map fst sets) > g @@ -139,7 +154,7 @@ Print out the info file. Pretty print the AbsSyn. -> pretty_filename <- getPrettyFileName name cli +> pretty_filename <- getPrettyFileName name opts > case pretty_filename of > Just s -> do > let out = render (ppAbsSyn abssyn) @@ -175,10 +190,10 @@ Report any conflicts in the grammar. Now, let's get on with generating the parser. Firstly, find out what kind of code we should generate, and where it should go: -> outfilename <- getOutputFileName fl_name cli -> opt_coerce <- getCoerce cli -> opt_strict <- getStrict cli -> opt_debug <- getDebug cli +> outfilename <- getOutputFileName fl_name opts +> opt_coerce <- getCoerce opts +> opt_strict <- getStrict opts +> opt_debug <- getDebug opts Add any special options or imports required by the parsing machinery. @@ -187,7 +202,7 @@ Add any special options or imports required by the parsing machinery. > (case hd of Just s -> s; Nothing -> "") > ++ importsToInject opt_debug -> if OptGLR `elem` cli +> if OptGLR `elem` opts %--------------------------------------- @@ -197,18 +212,18 @@ Branch off to GLR parser production > let > glr_decode -> | OptGLR_Decode `elem` cli = TreeDecode -> | otherwise = LabelDecode +> | OptGLR_Decode `elem` opts = TreeDecode +> | otherwise = LabelDecode > filtering -> | OptGLR_Filter `elem` cli = UseFiltering -> | otherwise = NoFiltering -> ghc_exts = UseGhcExts -> (importsToInject opt_debug) +> | OptGLR_Filter `elem` opts = UseFiltering +> | otherwise = NoFiltering +> ghc_exts = UseGhcExts +> (importsToInject opt_debug) Unlike below, don't always pass CPP, because only one of the files needs it. > (langExtsToInject) -> template' <- getTemplate glrBackendDataDir cli +> template' <- getTemplate glrBackendDataDir opts > let basename = takeWhile (/='.') outfilename > let tbls = (action,goto) > (parseName,_,_,_) <- case starts g of @@ -241,7 +256,7 @@ Resume normal (ie, non-GLR) processing > else do -> template' <- getTemplate lalrBackendDataDir cli +> template' <- getTemplate lalrBackendDataDir opts > let > template = template' ++ "/HappyTemplate.hs" @@ -251,7 +266,7 @@ Read in the template file for this target: and generate the code. -> magic_name <- getMagicName cli +> magic_name <- getMagicName opts > let > outfile = produceParser > g From bbb777974af35a26d53f1d8ff01af5842538a7c8 Mon Sep 17 00:00:00 2001 From: Reed Mullanix Date: Tue, 5 Aug 2025 18:29:38 -0400 Subject: [PATCH 4/7] Add test for pragma parsing --- tests/Makefile | 3 ++- tests/Pragma.y | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 tests/Pragma.y diff --git a/tests/Makefile b/tests/Makefile index 0b04ea9d..cfd04bc8 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -38,7 +38,8 @@ TESTS = Test.ly TestMulti.ly TestPrecedence.ly bug001.ly \ test_rules.y monaderror.y monaderror-explist.y \ typeclass_monad001.y typeclass_monad002.ly typeclass_monad_lexer.y \ rank2.y shift01.y \ - AttrGrammar001.y AttrGrammar002.y + AttrGrammar001.y AttrGrammar002.y \ + Pragma.y ERROR_TESTS = error001.y diff --git a/tests/Pragma.y b/tests/Pragma.y new file mode 100644 index 00000000..be07752d --- /dev/null +++ b/tests/Pragma.y @@ -0,0 +1,49 @@ +{-# OPTIONS_HAPPY --ghc --array --coerce --strict #-} + +{ +import Data.Char +import Tree +} + +%tokentype { Token } + +%lexer { lexer } { TokenEOF } + +%token + '*' { Sym '*' } + '+' { Sym '+' } + '-' { Sym '-' } + '(' { Sym '(' } + ')' { Sym ')' } + i { AnInt $$ } + +%% + +E :: {Tree ForestId Int} + : E '+' E { Plus $1 $3 } + | E '*' E { Times $1 $3 } + | E '-' E { Minus $1 $3 } + | '(' E ')' { Pars $2 } + | i { Const $1 } + + + +{ + +data Token + = TokenEOF + | Sym Char + | AnInt {getInt :: Int} + deriving (Show,Eq, Ord) + + +lexer :: String -> [Token] +lexer [] = [] +lexer (' ':cs) = lexer cs + +lexer (c:cs) | c `elem` "+*-()" + = Sym c : lexer cs + +lexer (c:cs) | isDigit c + = let (yes,no) = span isDigit cs in AnInt (read $ c:yes) : lexer no +} From 25cb9e1f0af77bd1d338ff1b1f23841d3790990e Mon Sep 17 00:00:00 2001 From: Reed Mullanix Date: Mon, 11 Aug 2025 12:32:02 -0400 Subject: [PATCH 5/7] Address review comments Suggested-by: Sebastian Graf --- lib/frontend/src/Happy/Frontend/Lexer.lhs | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/lib/frontend/src/Happy/Frontend/Lexer.lhs b/lib/frontend/src/Happy/Frontend/Lexer.lhs index b7ae4c29..12dd0298 100644 --- a/lib/frontend/src/Happy/Frontend/Lexer.lhs +++ b/lib/frontend/src/Happy/Frontend/Lexer.lhs @@ -167,8 +167,6 @@ followed by a special identifier. > lexCode :: (Token -> Pfunc a) -> String -> Int -> ParseResult a > lexCode cont rest = lexReadCode rest (0 :: Integer) "" cont - lexBracket cont rest = lexReadCode rest (0 :: Integer) "" cont - > lexNum :: (Token -> Pfunc a) -> Char -> String -> Int -> ParseResult a > lexNum cont c rest = > readNum rest (\ num rest' -> @@ -214,8 +212,8 @@ We need to take similar care when parsing pragmas. > lexReadPragma :: String -> String -> (Token -> Pfunc a) -> Int -> ParseResult a > lexReadPragma s c = case s of +> '#':'-':'}':r -> \cont -> cont (TokenInfo (cleanupCode (reverse c)) TokPragmaQuote) r > '\n':r -> \cont l -> lexReadPragma r ('\n':c) cont (l+1) -> '#':r -> \cont l -> lexReadClosingPragma r c cont l > '"'{-"-}:r -> lexReadString r (\ str r' -> > lexReadPragma r' ('"' : (reverse str) ++ '"' : c)) > a: '\'':r | isAlphaNum a -> lexReadPragma r ('\'':a:c) @@ -224,14 +222,6 @@ We need to take similar care when parsing pragmas. > ch:r -> lexReadPragma r (ch:c) > [] -> \_cont -> lexError "No closing '#-}' in code segment" [] - -> lexReadClosingPragma :: String -> String -> (Token -> Pfunc a) -> Int -> ParseResult a -> lexReadClosingPragma s c = case s of -> '-':'}':r -> \cont -> cont (TokenInfo (cleanupCode (reverse c)) TokPragmaQuote) r -> '-':ch:r -> lexReadPragma r (ch:'-':'#':c) -> ch:r -> lexReadPragma r (ch:'#':c) -> [] -> \_cont -> lexError "No closing '#-}' in options pragma" [] - ---------------------------------------------------------------------------- Utilities that read the rest of a token. From afc46f92570b91c62af33eca9cab6e9d86b4bf94 Mon Sep 17 00:00:00 2001 From: Reed Mullanix Date: Mon, 11 Aug 2025 12:32:29 -0400 Subject: [PATCH 6/7] Boostrap with happy 2.1.6 Suggested-by: Sebastian Graf --- .../src/Happy/Frontend/AttrGrammar/Parser.hs | 17 +++++++---------- lib/frontend/src/Happy/Frontend/Parser.hs | 17 +++++++---------- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/lib/frontend/src/Happy/Frontend/AttrGrammar/Parser.hs b/lib/frontend/src/Happy/Frontend/AttrGrammar/Parser.hs index fc800f62..a0f39e59 100644 --- a/lib/frontend/src/Happy/Frontend/AttrGrammar/Parser.hs +++ b/lib/frontend/src/Happy/Frontend/AttrGrammar/Parser.hs @@ -8,32 +8,29 @@ {-# LANGUAGE NoStrictData #-} {-# LANGUAGE UnboxedTuples #-} {-# LANGUAGE PartialTypeSignatures #-} -#if __GLASGOW_HASKELL__ >= 710 -{-# LANGUAGE PartialTypeSignatures #-} -#endif {-# OPTIONS_GHC -w #-} module Happy.Frontend.AttrGrammar.Parser (agParser) where import Happy.Frontend.ParseMonad.Class import Happy.Frontend.ParseMonad import Happy.Frontend.AttrGrammar -import qualified Data.Function as Happy_Prelude +import qualified Control.Monad as Happy_Prelude import qualified Data.Bool as Happy_Prelude import qualified Data.Function as Happy_Prelude -import qualified Data.Maybe as Happy_Prelude import qualified Data.Int as Happy_Prelude -import qualified Data.String as Happy_Prelude import qualified Data.List as Happy_Prelude -import qualified Control.Monad as Happy_Prelude -import qualified Text.Show as Happy_Prelude -import qualified GHC.Num as Happy_Prelude +import qualified Data.Maybe as Happy_Prelude +import qualified Data.String as Happy_Prelude +import qualified Data.Tuple as Happy_Prelude import qualified GHC.Err as Happy_Prelude +import qualified GHC.Num as Happy_Prelude +import qualified Text.Show as Happy_Prelude import qualified Data.Array as Happy_Data_Array import qualified Data.Bits as Bits import qualified GHC.Exts as Happy_GHC_Exts import Control.Applicative(Applicative(..)) import Control.Monad (ap) --- parser produced by Happy Version 2.1.3 +-- parser produced by Happy Version 2.1.6 newtype HappyAbsSyn = HappyAbsSyn HappyAny #if __GLASGOW_HASKELL__ >= 607 diff --git a/lib/frontend/src/Happy/Frontend/Parser.hs b/lib/frontend/src/Happy/Frontend/Parser.hs index 68f1fc43..edf551c4 100644 --- a/lib/frontend/src/Happy/Frontend/Parser.hs +++ b/lib/frontend/src/Happy/Frontend/Parser.hs @@ -8,33 +8,30 @@ {-# LANGUAGE NoStrictData #-} {-# LANGUAGE UnboxedTuples #-} {-# LANGUAGE PartialTypeSignatures #-} -#if __GLASGOW_HASKELL__ >= 710 -{-# LANGUAGE PartialTypeSignatures #-} -#endif {-# OPTIONS_GHC -w #-} module Happy.Frontend.Parser (ourParser) where import Happy.Frontend.ParseMonad.Class import Happy.Frontend.ParseMonad import Happy.Frontend.AbsSyn import Happy.Frontend.Lexer -import qualified Data.Function as Happy_Prelude +import qualified Control.Monad as Happy_Prelude import qualified Data.Bool as Happy_Prelude import qualified Data.Function as Happy_Prelude -import qualified Data.Maybe as Happy_Prelude import qualified Data.Int as Happy_Prelude -import qualified Data.String as Happy_Prelude import qualified Data.List as Happy_Prelude -import qualified Control.Monad as Happy_Prelude -import qualified Text.Show as Happy_Prelude -import qualified GHC.Num as Happy_Prelude +import qualified Data.Maybe as Happy_Prelude +import qualified Data.String as Happy_Prelude +import qualified Data.Tuple as Happy_Prelude import qualified GHC.Err as Happy_Prelude +import qualified GHC.Num as Happy_Prelude +import qualified Text.Show as Happy_Prelude import qualified Data.Array as Happy_Data_Array import qualified Data.Bits as Bits import qualified GHC.Exts as Happy_GHC_Exts import Control.Applicative(Applicative(..)) import Control.Monad (ap) --- parser produced by Happy Version 2.1.3 +-- parser produced by Happy Version 2.1.6 newtype HappyAbsSyn = HappyAbsSyn HappyAny #if __GLASGOW_HASKELL__ >= 607 From b4df3e22cfc8457925d60eddd4b1710bba2ecee0 Mon Sep 17 00:00:00 2001 From: Sebastian Graf Date: Sat, 16 Aug 2025 17:57:09 +0200 Subject: [PATCH 7/7] Fix the Pragma.y test --- happy.cabal | 1 + tests/Makefile | 2 +- tests/Pragma.y | 17 +++++++++++++---- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/happy.cabal b/happy.cabal index c88a9233..16bf30de 100644 --- a/happy.cabal +++ b/happy.cabal @@ -114,6 +114,7 @@ extra-source-files: tests/monad001.y tests/monad002.ly tests/monaderror.y + tests/Pragma.y tests/precedence001.ly tests/precedence002.y tests/test_rules.y diff --git a/tests/Makefile b/tests/Makefile index cfd04bc8..fe69f39b 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -39,7 +39,7 @@ TESTS = Test.ly TestMulti.ly TestPrecedence.ly bug001.ly \ typeclass_monad001.y typeclass_monad002.ly typeclass_monad_lexer.y \ rank2.y shift01.y \ AttrGrammar001.y AttrGrammar002.y \ - Pragma.y + Pragma.y ERROR_TESTS = error001.y diff --git a/tests/Pragma.y b/tests/Pragma.y index be07752d..9e1b6d4b 100644 --- a/tests/Pragma.y +++ b/tests/Pragma.y @@ -2,13 +2,10 @@ { import Data.Char -import Tree } %tokentype { Token } -%lexer { lexer } { TokenEOF } - %token '*' { Sym '*' } '+' { Sym '+' } @@ -19,7 +16,7 @@ import Tree %% -E :: {Tree ForestId Int} +E :: {Tree} : E '+' E { Plus $1 $3 } | E '*' E { Times $1 $3 } | E '-' E { Minus $1 $3 } @@ -36,6 +33,13 @@ data Token | AnInt {getInt :: Int} deriving (Show,Eq, Ord) +data Tree + = Plus Tree Tree + | Times Tree Tree + | Minus Tree Tree + | Pars Tree + | Const Int + deriving Show lexer :: String -> [Token] lexer [] = [] @@ -46,4 +50,9 @@ lexer (c:cs) | c `elem` "+*-()" lexer (c:cs) | isDigit c = let (yes,no) = span isDigit cs in AnInt (read $ c:yes) : lexer no + +happyError _ = error "Parse error" + +main :: IO () +main = print $ happyParse $ lexer "1+3" }