Hi Don.
Don Stewart wrote:
alexander.fuchs:
In a happy parser I have this code 1):
%monad { Parsed } { thenP } { returnP }
type Parsed = State Env.Env
returnP :: a -> Parsed a
returnP a = return a
thenP :: Parsed a -> (a -> Parsed b) -> Parsed b
thenP x k = x >>= k
An alternative was this 2) (yes, redundant in happy):
returnP :: a -> Parsed a
returnP = return
thenP :: Parsed a -> (a -> Parsed b) -> Parsed b
thenP = (>>=)
Could you submit a minimal, complete grammar file, so
we can look at the generated code?
After reducing and simplifying the grammar file to the minimum for my
sample input I can't see any difference in performance anymore. Due to
other code changes the difference is almost non-existent anymore even
before simplification. I blame laziness for my lack of intuition of what
is going on ;-)
Anyway, as I am still wondering why ghc creates different code for
returnP a = return a
returnP = return
I put the grammar file online, in case you still want to have a look at it:
http://cs.uiowa.edu/~fuchs/DarwinCS/DarwinCS/Darwin/Tptp/Parser.y
The complete source (compiles with make opt) is here:
http://cs.uiowa.edu/~fuchs/DarwinCS/DarwinCS.tar.gz
And I use it on this input:
http://cs.uiowa.edu/~fuchs/DarwinCS/SYN854-1.p
with the command line:
time Darwin/Main +RTS -sstderr -RTS 600 SYN854-1.p
Sorry about the noise,
Alexander
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users