{-
-----------------------------------------------------------------------------
-$Id: Parser.y,v 1.49 2000/11/24 17:02:03 simonpj Exp $
+$Id: Parser.y,v 1.51 2001/01/30 12:13:34 simonmar Exp $
Haskell grammar.
-}
{
-module Parser ( ParseStuff(..), parse ) where
+module Parser ( parseModule, parseExpr ) where
import HsSyn
import HsTypes ( mkHsTupCon )
-import HsPat ( InPat(..) )
import RdrHsSyn
import Lex
'then' { ITthen }
'type' { ITtype }
'where' { ITwhere }
- '_scc_' { ITscc }
+ '_scc_' { ITscc } -- ToDo: remove
'forall' { ITforall } -- GHC extension keywords
'foreign' { ITforeign }
'{-# INLINE' { ITinline_prag }
'{-# NOINLINE' { ITnoinline_prag }
'{-# RULES' { ITrules_prag }
+ '{-# SCC' { ITscc_prag }
'{-# DEPRECATED' { ITdeprecated_prag }
'#-}' { ITclose_prag }
- '__expr' { ITexpr }
-
{-
'__interface' { ITinterface } -- interface keywords
'__export' { IT__export }
%monad { P } { thenP } { returnP }
%lexer { lexer } { ITeof }
-%name parse
+%name parseModule module
+%name parseExpr exp
%tokentype { Token }
%%
-----------------------------------------------------------------------------
--- Entry points
-
-parse :: { ParseStuff }
- : module { PModule $1 }
- | '__expr' exp { PExpr $2 }
-
------------------------------------------------------------------------------
-- Module Header
-- The place for module deprecation is really too restrictive, but if it
| '_casm_' CLITLIT aexps0 { HsCCall $2 $3 False True cbot }
| '_casm_GC_' CLITLIT aexps0 { HsCCall $2 $3 True True cbot }
- | '_scc_' STRING exp { if opt_SccProfilingOn
- then HsSCC $2 $3
- else HsPar $3 }
+ | scc_annot exp { if opt_SccProfilingOn
+ then HsSCC $1 $2
+ else HsPar $2 }
| fexp { $1 }
+scc_annot :: { FAST_STRING }
+ : '_scc_' STRING { $2 }
+ | '{-# SCC' STRING '#-}' { $2 }
+
ccallid :: { FAST_STRING }
: VARID { $1 }
| CONID { $1 }
-----------------------------------------------------------------------------
{
-data ParseStuff = PModule RdrNameHsModule | PExpr RdrNameHsExpr
-
happyError :: P a
happyError buf PState{ loc = loc } = PFailed (srcParseErr buf loc)
}