25.10.2015 Views

Write You a Haskell Stephen Diehl

1kEcQTb

1kEcQTb

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Alex<br />

Our lexer module will export our Token definition and a function for converting an arbitrary String into<br />

a token stream or a list of Tokens.<br />

{<br />

module Lexer (<br />

Token(..),<br />

scanTokens<br />

) where<br />

import Syntax<br />

}<br />

e tokens are simply an enumeration of the unique possible tokens in our grammar.<br />

data Token<br />

= TokenLet<br />

| TokenTrue<br />

| TokenFalse<br />

| TokenIn<br />

| TokenLambda<br />

| TokenNum Int<br />

| TokenSym String<br />

| TokenArrow<br />

| TokenEq<br />

| TokenAdd<br />

| TokenSub<br />

| TokenMul<br />

| TokenLParen<br />

| TokenRParen<br />

| TokenEOF<br />

deriving (Eq,Show)<br />

scanTokens :: String -> [Token]<br />

scanTokens = alexScanTokens<br />

e token definition is list of function definitions mapping atomic character and alphabetical sequences<br />

to constructors for our Token datatype.<br />

%wrapper ”basic”<br />

$digit = 0-9<br />

$alpha = [a-zA-Z]<br />

$eol = [\n]<br />

130

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!