Fwd: Parsing integers [was: Re: [Haskell-cafe] help]

Tim Chevalier catamorphism at gmail.com
Sun Dec 9 16:22:51 EST 2007


[reply forwarded to list]

---------- Forwarded message ----------
From: Ryan Bloor <ryanbloor at hotmail.com>

hi

 sorry for vagueness.


I am writing a basic Parser from scratch. So far I have functions;

 # removeSpaces
 # match - which checks if a string is a substring of another
 # orParser which combines two parser's abilities
 # Basic pasrers like... parseInt, parseTrue, parseFalse, parseBool
using the orParser on True and False.

 What I want to do now is have a parseBinaryOp that recognises:
 parseBinaryOp "+" "(5 + 2) if"                      >>>gives>>
             [(EInt 5, EInt 2, "if")]

 So I think that I have to split the initial string into four parts.

 "+" becomes op
 '(' becomes tokenF
 ')' becomes tokenB
 "5" becomes e1
 "2" becomes e2

 parseBinaryOp :: String -> String -> [(Expr, Expr, String)]
parseBinaryOp op str = let (tokenF,e1,op,e2,tokenB) =

 I am not sure how to go about separating the string for how I need it
using my other functiuons.

 Ryan





 ________________________________

 > Date: Sun, 9 Dec 2007 13:07:23 -0800
> From: catamorphism at gmail.com
> To: ryanbloor at hotmail.com
> Subject: Parsing integers [was: Re: [Haskell-cafe] help]
> CC: haskell-cafe at haskell.org

>
> On 12/9/07, Ryan Bloor <ryanbloor at hotmail.com> wrote:
> >
> > hi
> >
> > I have a function parseInt... which needs an error guard for when the input
> > is not an Int.
> >
> > parseInt :: Parser
> > parseInt [] = []
> > parseInt xs = let (digits, rest) = span isDigit (removeSpace xs)
> > in [(EInt (read digits), removeSpace rest)]
> >
> > Also... I have a function that does this... parseBinaryOp "+" "(5 + 2) if"
> > gives...[(Int 5, Int 2, "if")]
> > so, op is '+' or "&&". I am unsure of how to begin...
> >
> > parseBinaryOp :: String -> String -> [(Expr, Expr, String)]
> > parseBinaryOp op str
> >
>
> Check out:
> http://www.haskell.org/haskellwiki/Homework_help
>
> If this isn't homework, try posting again and phrasing your question
> in the form of a question; saying "I am unsure of how to begin"
> doesn't help us help you think about the problem.
>
> Cheers,
> Tim
>
> --
> Tim Chevalier * catamorphism.org * Often in error, never in doubt
> "[Teaching children to read] will make America what we want it to be,
> a literate country and a hopefuller country." -- George W. Bush


________________________________
Are you the Quizmaster? Play BrainBattle with a friend now!


More information about the Haskell-Cafe mailing list