Re: [Haskell-cafe] Parser left recursion

2013-03-02 Thread Roman Cheplyaka
You can find our experiments here: https://github.com/feuerbach/hagll But don't set your expectations high :-) Roman * Paul Callaghan paulcc@gmail.com [2013-03-01 06:27:46+] Hi Another alternative is this Haskell library: https://github.com/paulcc/xsaiga This is a combinator

Re: [Haskell-cafe] Parser left recursion

2013-02-28 Thread Paul Callaghan
Hi Another alternative is this Haskell library: https://github.com/paulcc/xsaiga This is a combinator library which is suitable for mid-scale NLP work, so handles left recursion and (high amounts of) ambiguity to produce a packed result (which can be decoded to a list of results if required). It

Re: [Haskell-cafe] Parser left recursion

2013-02-26 Thread Martin Drautzburg
On Sunday, 24. February 2013 16:04:11 Tillmann Rendel wrote: Both approaches are essentially equivalent, of course: Before considering the very same nonterminal again, we should have consumed at least one token. I see. Thanks So for the laymen: expr ::= expr + expr is a problem, because

Re: [Haskell-cafe] Parser left recursion

2013-02-26 Thread Dominique Devriese
2013/2/26 Martin Drautzburg martin.drautzb...@web.de: I wonder if I can enforce the nonNr property somehow, i.e. enforce the rule will not consider the same nonterminal again without having consumed any input. You might be interested in this paper: Danielsson, Nils Anders. Total parser

Re: [Haskell-cafe] Parser left recursion

2013-02-24 Thread Martin Drautzburg
On Wednesday, 20. February 2013 09:59:47 Tillmann Rendel wrote: So the grammar is: Exp ::= Int | Exp + Exp My naive parser enters an infinite recursion, when I try to parse 1+2. I do understand why: hmm, this expression could be a plus, but then it must start with

Re: [Haskell-cafe] Parser left recursion

2013-02-24 Thread Tillmann Rendel
Hi Martin, Martin Drautzburg wrote: Note that the left recursion is already visible in the grammar above, no need to convert to parser combinators. The problem is that the nonterminal Exp occurs at the left of a rule for itself. Just a silly quick question: why isn't right-recursion a similar

Re: [Haskell-cafe] Parser left recursion

2013-02-24 Thread Roman Cheplyaka
* Martin Drautzburg martin.drautzb...@web.de [2013-02-24 12:31:37+0100] Twan van Laarhoven told me that: Left-recursion is always a problem for recursive-descend parsers. Note that the left recursion is already visible in the grammar above, no need to convert to parser combinators.

Re: [Haskell-cafe] Parser left recursion

2013-02-24 Thread Kim-Ee Yeoh
On Sun, Feb 24, 2013 at 7:09 PM, Roman Cheplyaka r...@ro-che.info wrote: Thus, your recursion is well-founded — you enter the recursion with the input strictly smaller than you had in the beginning. Perhaps you meant /productive/ corecursion? Because the definition A ::= B A you gave is

Re: [Haskell-cafe] Parser left recursion

2013-02-24 Thread Roman Cheplyaka
* Kim-Ee Yeoh k...@atamo.com [2013-02-24 19:22:33+0700] On Sun, Feb 24, 2013 at 7:09 PM, Roman Cheplyaka r...@ro-che.info wrote: Thus, your recursion is well-founded — you enter the recursion with the input strictly smaller than you had in the beginning. Perhaps you meant

Re: [Haskell-cafe] Parser left recursion

2013-02-24 Thread Roman Cheplyaka
* Kim-Ee Yeoh k...@atamo.com [2013-02-24 19:22:33+0700] On Sun, Feb 24, 2013 at 7:09 PM, Roman Cheplyaka r...@ro-che.info wrote: Thus, your recursion is well-founded — you enter the recursion with the input strictly smaller than you had in the beginning. Perhaps you meant

Re: [Haskell-cafe] Parser left recursion

2013-02-24 Thread Kim-Ee Yeoh
On Sun, Feb 24, 2013 at 7:47 PM, Roman Cheplyaka r...@ro-che.info wrote: Or perhaps you meant that the production itself, when interpreted as a definition, is corecursive? I was merely thrown off by your mention of well-founded and the assertion that you're left with a strictly smaller input.

Re: [Haskell-cafe] Parser left recursion

2013-02-24 Thread Roman Cheplyaka
* Kim-Ee Yeoh k...@atamo.com [2013-02-24 19:56:13+0700] I was merely thrown off by your mention of well-founded and the assertion that you're left with a strictly smaller input. I don't see any of this. It may become more obvious if you try to write two recursive descent parsers (as recursive

Re: [Haskell-cafe] Parser left recursion

2013-02-24 Thread Kim-Ee Yeoh
On Sun, Feb 24, 2013 at 8:03 PM, Roman Cheplyaka r...@ro-che.info wrote: It may become more obvious if you try to write two recursive descent parsers (as recursive functions) which parse a left-recursive and a non-left-recursive grammars, and see in which case the recursion is well-founded

Re: [Haskell-cafe] Parser left recursion

2013-02-24 Thread Brandon Allbery
On Sun, Feb 24, 2013 at 6:31 AM, Martin Drautzburg martin.drautzb...@web.de wrote: Just a silly quick question: why isn't right-recursion a similar problem? Very roughly: Left recursion is: let foo n = n + foo n in ... Right recursion is: let foo 1 = 1; foo n = n + foo (n - 1) in ... In

Re: [Haskell-cafe] Parser left recursion

2013-02-24 Thread Tillmann Rendel
Hi, Kim-Ee Yeoh wrote: Perhaps you meant /productive/ corecursion? Because the definition A ::= B A you gave is codata. If you write a recursive descent parser, it takes the token stream as an input and consumes some of this input. For example, the parser could return an integer that says

Re: [Haskell-cafe] Parser left recursion

2013-02-24 Thread Kim-Ee Yeoh
On Sun, Feb 24, 2013 at 10:04 PM, Tillmann Rendel ren...@informatik.uni-marburg.de wrote: The recursion is well-founded if (drop n1 text) is smaller then text. So we have two cases, as Roman wrote: If the language defined by B contains the empty string, then n1 can be 0, so the recursion is

Re: [Haskell-cafe] Parser left recursion

2013-02-24 Thread wren ng thornton
On 2/24/13 7:56 AM, Kim-Ee Yeoh wrote: On Sun, Feb 24, 2013 at 7:47 PM, Roman Cheplyaka r...@ro-che.info wrote: Or perhaps you meant that the production itself, when interpreted as a definition, is corecursive? I was merely thrown off by your mention of well-founded and the assertion that

Re: [Haskell-cafe] Parser left recursion

2013-02-21 Thread S. Doaitse Swierstra
As mentioned before, the way to handle this specific problem is to use either the pChainl or pChainr parser combinators, as e.g. found on: http://hackage.haskell.org/packages/archive/uu-parsinglib/2.7.4.1/doc/html/Text-ParserCombinators-UU-Derived.html and many similar libraries. So one can

Re: [Haskell-cafe] Parser left recursion

2013-02-20 Thread Dmitry Olshansky
Did you see expression parser in parsec packagehttp://hackage.haskell.org/packages/archive/parsec/3.1.3/doc/html/Text-Parsec-Expr.html? Is it not enough? 2013/2/20 Martin Drautzburg martin.drautzb...@web.de Hello all, this was previously asked on haskell-beginners, but only partially

Re: [Haskell-cafe] Parser left recursion

2013-02-20 Thread Tillmann Rendel
Hi, Martin Drautzburg wrote: As an exercise I am writing a parser roughly following the expamples in Graham Hutton's book. The language contains things like: data Exp = Lit Int -- literal integer | Plus Exp Exp So the grammar is: Exp ::= Int | Exp + Exp My naive parser

Re: [Haskell-cafe] Parser left recursion

2013-02-20 Thread Roman Cheplyaka
* Tillmann Rendel ren...@informatik.uni-marburg.de [2013-02-20 09:59:47+0100] One way to fix this problem is to refactor the grammar in order to avoid left recursion. So let's distinguish expressions that can start with expressions and expressions that cannot start with expressions: [...]

Re: [Haskell-cafe] Parser left recursion

2013-02-20 Thread Tillmann Rendel
Hi, Roman Cheplyaka wrote: Another workaround is to use memoization of some sort — see e.g. GLL (Generalized LL) parsing. Is there a GLL parser combinator library for Haskell? I know about the gll-combinators for Scala, but havn't seen anything for Haskell. Bonus points for providing the

Re: [Haskell-cafe] Parser left recursion

2013-02-20 Thread Roman Cheplyaka
* Tillmann Rendel ren...@informatik.uni-marburg.de [2013-02-20 12:39:35+0100] Hi, Roman Cheplyaka wrote: Another workaround is to use memoization of some sort — see e.g. GLL (Generalized LL) parsing. Is there a GLL parser combinator library for Haskell? I know about the gll-combinators

Re: [Haskell-cafe] Parser left recursion

2013-02-20 Thread Dominique Devriese
All, Many (but not all) of the parsing algorithms that support left recursion cannot be implemented in Haskell using the standard representation of recursion in parser combinators. The problem can be avoided in Scala because it has imperative features like referential identity and/or mutable

[Haskell-cafe] parser combinator for left-recursive grammars

2013-02-20 Thread oleg
It is indeed true that a grammar with left-recursion can be transformed to an equivalent grammar without left recursion -- equivalent in terms of the language recognized -- but _not_ in the parse trees. Linguists in particular care about parses. Therefore, it was linguists who developed the

Re: [Haskell-cafe] Parser left recursion

2013-02-20 Thread Stephen Tetley
More primitively, Parsec and its predecessor Hutton-Meijer provide the chainl/chainr combinators, these automatically remove left recursion within the parser - i.e. you don't have to rewrite the grammar. On 20 February 2013 08:19, Dmitry Olshansky olshansk...@gmail.com wrote: Did you see

Re: [Haskell-cafe] Parser left recursion

2013-02-20 Thread Martin Drautzburg
Thank you very much. To clarify: I am not in need of a parser, I just wanted to understand why left recursion is an issue (that was easy) and what techniques help to circumvent the problem. So your answer was spot-on (though I haven't implemented it yet) On Wednesday, 20. February 2013

[Haskell-cafe] Parser left recursion

2013-02-19 Thread Martin Drautzburg
Hello all, this was previously asked on haskell-beginners, but only partially answered. As an exercise I am writing a parser roughly following the expamples in Graham Hutton's book. The language contains things like: data Exp = Lit Int -- literal integer | Plus Exp Exp My naive

Re: [Haskell-cafe] Parser left recursion

2013-02-19 Thread Roman Cheplyaka
* Martin Drautzburg martin.drautzb...@web.de [2013-02-20 08:13:16+0100] I do know for sure, that it is possible to parse (1+2)+3 (ghci does it just fine). But I seem to be missing a trick. Can anyone shed some light on this? The trick in this case is that ghci doesn't use a recursive

[Haskell-cafe] parser error in pattern

2011-10-17 Thread kolli kolli
hey can anyone tell me what is parser error in parser??Plz help me out ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

Re: [Haskell-cafe] parser error in pattern

2011-10-17 Thread Ivan Lazar Miljenovic
On 18 October 2011 08:43, kolli kolli nammukoll...@gmail.com wrote: hey can anyone tell me what is parser error in parser??Plz help me out It's when the parser can't parse what it's provided providing the code that caused the problem and the actual error message is required for a more

Re: [Haskell-cafe] parser error in pattern

2011-10-17 Thread kolli kolli
after parsing a string i am evaluating it... string if t1 then t2 else t3 my code is eval1 :: Term - Maybe Term eval1(If Tru t2 t3) = Just t2 eval1(If Fls t2 t3) = Just t3 eval1(If t1 t2 t3) = case eval t1 where eval1(If t1 t2 t3) = Just t1 eval :: Term - Term eval (IsZero

Re: [Haskell-cafe] parser error in pattern

2011-10-17 Thread Ivan Lazar Miljenovic
On 18 October 2011 08:56, kolli kolli nammukoll...@gmail.com wrote: after parsing a string i am evaluating it... string if t1 then t2 else t3 my code is eval1 :: Term -  Maybe Term eval1(If Tru t2 t3) = Just t2 eval1(If Fls t2 t3) = Just t3 eval1(If t1 t2 t3) =  case eval t1    

Re: [Haskell-cafe] parser error in pattern

2011-10-17 Thread Ivan Lazar Miljenovic
On 18 October 2011 09:08, kolli kolli nammukoll...@gmail.com wrote: actual error message is homework2.lhs:137:20: parse error on input `where' data Term = Tru   | Fls   | If Term Term Term   | Zero   | Succ Term   | Pred Term   | IsZero

Re: [Haskell-cafe] parser error in pattern

2011-10-17 Thread Ivan Lazar Miljenovic
On 18 October 2011 09:14, kolli kolli nammukoll...@gmail.com wrote: I didnt understand properly but made changes according to what I understood..Its still giving me the same error eval1(If t1 t2 t3) =  case (If t1 t2 t3) of     eval1(If t1 t2 t3) -  Just t1 You can't do

[Haskell-cafe] parser combinators need how many values to report errors?

2008-08-21 Thread Jason Dusek
I'm looking for a copy of: Predictive Parser Combinators Need four Values to Report Errors. I've poked around on the JFP's web site at Cambridge and they don't seem to have Volume 6 anymore. -- _jsn ___ Haskell-Cafe mailing list

Re: [Haskell-cafe] parser

2007-12-07 Thread Brent Yorgey
On Dec 7, 2007 6:04 PM, Chris Eidhof [EMAIL PROTECTED] wrote: On 7 dec 2007, at 23:51, Ryan Bloor wrote: i am using hugs and the isDigit and anything 'is' doesn't work... they must have forgot to add them in! Does GHC work with them. Perhaps you need to import Data.Char? -Brent

Re: [Haskell-cafe] parser

2007-12-07 Thread Chris Eidhof
: haskell-cafe@haskell.org From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: Re: [Haskell-cafe] parser Date: Fri, 7 Dec 2007 22:17:54 +0100 On 6 dec 2007, at 18:06, Ryan Bloor wrote: Can anyone advise me on how to check whether a string contains ints, chars, bools, etc 2345 + 6767

Re: [Haskell-cafe] parser

2007-12-07 Thread Chris Eidhof
PROTECTED] To: [EMAIL PROTECTED] Subject: Re: [Haskell-cafe] parser Date: Fri, 7 Dec 2007 23:31:38 +0100 On 7 dec 2007, at 22:55, Ryan Bloor wrote: hi The thing is... it will be a simple parser really. The expressions are already defined and we can't use parsec imports. Below

Re: [Haskell-cafe] parser

2007-12-07 Thread Chris Eidhof
On 6 dec 2007, at 18:06, Ryan Bloor wrote: Can anyone advise me on how to check whether a string contains ints, chars, bools, etc 2345 + 6767 shoudl give IntAdd (2345) (6767) 2345 should give IntT 2345 You need to write a parser. There are a lot of libraries that will help you write a

[Haskell-cafe] parser

2007-12-06 Thread Ryan Bloor
hi Can anyone advise me on how to check whether a string contains ints, chars, bools, etc 2345 + 6767 shoudl give IntAdd (2345) (6767) 2345 should give IntT 2345 Ryan _ Who's friends with who and co-starred in what?

Re: [Haskell-cafe] parser

2007-12-06 Thread Thomas Hartman
. t. Ryan Bloor [EMAIL PROTECTED] Sent by: [EMAIL PROTECTED] 12/06/2007 12:06 PM To haskell-cafe@haskell.org cc Subject [Haskell-cafe] parser hi Can anyone advise me on how to check whether a string contains ints, chars, bools, etc 2345 + 6767 shoudl give IntAdd (2345

[Haskell-cafe] Parser inversions [Was: CC-delcont-0.1...]

2007-08-01 Thread oleg
Dan Doel wrote about `inverting' a parser -- first, a pure parser consuming a string and later a parser written in a monadic style and consuming a monadic list: data MList' m a = MNil | MCons a (MList m a) type MList m a = m (MList' m a) The second attempt proved fully successful: So,

[Haskell-cafe] Parser question

2005-03-15 Thread Nicola Whitehead
Hi folks, I have a parser problem. I have a basic calculator program (Graham Hutton's from Nottingham) which contains the following code: -- Define a parser to handle the inputexpr :: Parser Intexpr = do t - term do symbol "+" e - expr return (t + e) +++ return t term :: Parser

Re: [Haskell-cafe] Parser question

2005-03-15 Thread Henning Thielemann
On Tue, 15 Mar 2005, Nicola Whitehead wrote: Hi folks, I have a parser problem. I have a basic calculator program (Graham Hutton's from Nottingham) which contains the following code: -- Define a parser to handle the input expr :: Parser Int expr = do t - term do symbol +

Re: [Haskell-cafe] Parser question

2005-03-15 Thread Mark Carroll
On Tue, 15 Mar 2005, Nicola Whitehead wrote: (snip) term :: Parser Int term = do f - factor do symbol * e - expr return (f * t) +++ return f (snip) symbol and natural are defined elsewhere and work fine, but when I compile it I get

Re: [Haskell-cafe] Parser question

2005-03-15 Thread Jules Bean
On 15 Mar 2005, at 12:38, Mark Carroll wrote: Variables (although why they're called that in Haskell I'm not sure) Because the value that they denote can vary between different calls of the same function? Jules ___ Haskell-Cafe mailing list

[Haskell-cafe] Parser problem continued

2005-03-15 Thread Nicola Whitehead
Curiouser and curiouser... expr :: Parser Intexpr = do t - term do symbol "+"e - expr return (t + e) +++ return t solves the undefined variable problem but introduces a new 'Last operator in do {...} must be an _expression_' error, which then disappears if I explicitly return e expr

Re: [Haskell-cafe] Parser problem continued

2005-03-15 Thread robert dockins
expr :: Parser Int expr = do t - term do symbol + e - expr return e return (t + e) +++ return t- 't' is not in scope at the arrow. t only exists inside the do block, and your code parses like this ( do t - return (t+e) ) +++

RE: [Haskell-cafe] Parser problem continued

2005-03-15 Thread Nicola Whitehead
perhaps like this: expr = do t - term (do symbol + e - expr return (t+e) ) +++ (return t) although I think you may also want a 'try' before the first alternative. No, that still gives the same undefined variable error.

Re: [Haskell-cafe] Parser problem continued

2005-03-15 Thread Tomasz Zielonka
On Tue, Mar 15, 2005 at 03:44:55PM -, Nicola Whitehead wrote: perhaps like this: expr = do t - term (do symbol + e - expr return (t+e) ) +++ (return t) although I think you may also want a 'try' before the

Re: [Haskell-cafe] Parser problem continued

2005-03-15 Thread Arthur Baars
The layout of your code is very important when writing haskell code: Your code : expr = do t - term do symbol + e - expr return e return (t + e) +++ return t is equivalent to: expr = do { t - term ; do { symbol + ; e -

RE: [Haskell-cafe] Parser problem continued

2005-03-15 Thread Nicola Whitehead
Thanks folks! Writing it in a lispy manner seems to work. I see what Arthur means about the layout - I think I'm still thinking too much in C. :) Nik Dr Nik Freydís Whitehead University of Akureyri, Iceland * Having the moral