[Haskell-beginners] SQL Lexer

Jan Jakubuv jakubuv at gmail.com
Mon May 11 06:33:20 EDT 2009


Hello Patrick,

that's a nice one. I have two notes for you:

1) Why do you handle spaces as tokens? Can't you just skip them completely?
   It could make the parser simpler.

2) Your lexer does not provide any information about positions of tokens in
   the source code. You may want to do that in order to:

   a) report better error messages
   b) use parsec's `token` function [1] to make parsec work with your tokens.
      Note that parsec wants you to use its data type `SourcePos` to represent
      positions. See [2] for a simple example and further stuff.

[1]: http://legacy.cs.uu.nl/daan/download/parsec/parsec.html#token
[2]: http://legacy.cs.uu.nl/daan/download/parsec/parsec.html#SeperateScanners

Sincerely,
   Jan.

On Fri, May 08, 2009 at 09:53:04PM -0400, Patrick LeBoutillier wrote:
> Hi all,
> 
> In the process of writing an SQL parser I started by writing a lexer.
> The code can be found here:
> http://hpaste.org/fastcgi/hpaste.fcgi/view?id=4736#a4736
> 
> You can run it like this in ghci:
> 
> Prelude SQL.Lexer> runLexer "select * from TABLE order by FIELD"
> [Token Reserved "select",Token Space " ",Token Operator "*",Token
> Space " ",Token Reserved "from",Token Space " ",Token Identifier
> "TABLE",Token Space " ",Token Reserved "order",Token Space " ",Token
> Reserved "by",Token Space " ",Token Identifier "FIELD"]
> 
> Since this is pretty much my first Haskell project over 10 lines long,
> I'm looking for some feedback of any kind.
> Ultimately I would like to use this lexer to build a functional SQL
> parser using Parsec.
> 
> 
> Thanks,
> 
> Patrick
> 
> -- 
> =====================
> Patrick LeBoutillier
> Rosemère, Québec, Canada
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners


-- 
Heriot-Watt University is a Scottish charity
registered under charity number SC000278.



More information about the Beginners mailing list