[Haskell-cafe] GHC lexer questions

Phyx lonetiger at gmail.com
Thu Apr 22 08:52:46 EDT 2010


Hi all,

I have a few questions about the GHC lexer (currently using GHC Glasgow
Haskell Compiler, Version 6.13.20100320, for Haskell 98, stage 2 booted by
GHC version 6.12.1)

 

And I notice that when invoking the lexer I get a few unexpected results
that I was hoping someone could clarify.

 

The first part has to do with braces. Opening braces are lexed fine, but the
closing ones throw an error. I assume the lexer is keeping some kind of
state and trying to do brace matching? (but isn't this supposed to be done
by the parser?)

 

?parseLine("{")->tag

cStatelessParseResultSOk

?parseLine("}")->tag

cStatelessParseResultSFailed

 

and

 

?parseLine("{-")->tag

cStatelessParseResultSOk

?parseLine("-}")->tag

cStatelessParseResultSFailed

 

and in a statement "let foo = .." "foo" isn't lexed as an identifier, "f" is
lexed as a ITvocurly and the "oo" as an identifier. I find this  rather odd,
and maybe it's me doing something wrong but doubt it.

 

The original Haskell code I call from FFI is 

 

lexSourceString :: String -> IO (StatelessParseResult [Located Token])

lexSourceString source =  

 do

   buffer <- stringToStringBuffer source

   let srcLoc  = mkSrcLoc (mkFastString "internal:string") 1 1

   let dynFlag = defaultDynFlags 

   let result  = lexTokenStream buffer srcLoc dynFlag

   return $ convert result

 

-- | convert the build in ParseResult to out custom StateLessParseResult

--   mainly because the State is difficult to marshal and we don't really
seem to need it

convert :: ParseResult a -> StatelessParseResult a

convert (POk _ ty)        = SOk ty

convert (PFailed src msg) = SFailed src (showSDocDump msg)

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20100422/d3187749/attachment-0001.html


More information about the Haskell-Cafe mailing list