File: Lexer.lhs

package info (click to toggle)
frown 0.6.1-13
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 9,956 kB
  • sloc: haskell: 35,132; makefile: 228; csh: 35; yacc: 23
file content (17 lines) | stat: -rw-r--r-- 884 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
> module Lexer  (module Terminal1, module Lexer) where
> import Char
> import Terminal1
>
> lexer                         ::  String -> [Terminal]
> lexer []                      =   []
> lexer ('+'  : cs)             =   Addop Plus    : lexer cs
> lexer ('-'  : cs)             =   Addop Minus   : lexer cs
> lexer ('*'  : cs)             =   Mulop Times   : lexer cs
> lexer ('/'  : cs)             =   Mulop Divide  : lexer cs
> lexer ('='  : cs)             =   Equal         : lexer cs
> lexer ('('  : cs)             =   LParen        : lexer cs
> lexer (')'  : cs)             =   RParen        : lexer cs
> lexer (c : cs)
>     | isAlpha c               =   let (s, cs') = span isAlphaNum  cs  in  ident    (c : s) : lexer cs'
>     | isDigit c               =   let (s, cs') = span isDigit     cs  in  numeral  (c : s) : lexer cs'
>     | otherwise               =   lexer cs