[Haskell-cafe] Parsec error message not making any sense
Roman Cheplyaka
roma at ro-che.info
Tue Jul 9 09:37:05 CEST 2013
Please check your code.
I had two problems with it: mixed tabs and spaces, and undefined
'quotedChar'. After defining quotedChar = anyChar, I get a different
error message from yours:
*Main> parseFromFile textgridfile "testdata.TextGrid"
Left "testdata.TextGrid" (line 137, column 1):
unexpected end of input
expecting quote at end of cell
Roman
* Fredrik Karlsson <dargosch at gmail.com> [2013-07-09 08:07:24+0200]
> Hi Roman,
>
> I'm using parsec-3.1.3
>
> I put the code in a gist here - sorry about that.
>
> https://gist.github.com/dargosch/5955045
>
> Fredrik
>
>
>
>
> On Tue, Jul 9, 2013 at 12:08 AM, Roman Cheplyaka <roma at ro-che.info> wrote:
>
> > Hi Fredrik,
> >
> > First, do you use the latest parsec version (3.1.3)? If not, can you try
> > the same with 3.1.3?
> >
> > Second, please upload your code to hpaste.org or a similar service and
> > give us the link. It's not much fun to extract code from an html email.
> >
> > Roman
> >
> > * Fredrik Karlsson <dargosch at gmail.com> [2013-07-08 23:54:17+0200]
> > > Dear list,
> > >
> > > I have a Parsec parser that fails and gives the following error message:
> > >
> > > *Main> parseFromFile textgridfile testFile
> > > Left
> > >
> > "/Users/frkkan96/Documents/src/ume/umecore/testing/testdata/testdata.TextGrid"
> > > (line 35, column 5):
> > > unexpected "t"
> > > expecting "intervals ["
> > >
> > > Now, this is perfectly understandable, but line 35, col 5 in the file
> > being
> > > parsed looks like the supplies image - there is no 't' there.
> > >
> > > Any ideas on what is going on?
> > >
> > > The parser I am using is:
> > >
> > > data VariableLine = VariableLine String String deriving Show
> > > data TierType = IntervalTier | PointTier deriving Show
> > >
> > > data Tier = Tier String deriving Show
> > > data LabelFile = LabelFile Double Double deriving Show
> > >
> > > data Label = Label String TierType Double Double String deriving Show
> > >
> > >
> > > haskelldef = makeTokenParser haskellDef
> > >
> > >
> > > textgridfile :: Parser (LabelFile, [[Label]])
> > > textgridfile = do
> > > h <- header
> > > ll <- many1 tier
> > > return $ (h,ll)
> > >
> > > header :: Parser LabelFile
> > > header = do
> > > string headTS1
> > > start <- try (float haskelldef)
> > > <|> (fmap fromInteger $ integer haskelldef )
> > > string "xmax = "
> > > end <- try (float haskelldef)
> > > <|> (fmap fromInteger $ integer haskelldef )
> > > string "tiers? <exists> \n"
> > > string "size = "
> > > integer haskelldef
> > > string "item []:"
> > > whiteSpace haskelldef
> > > return $ LabelFile start end
> > >
> > > tier :: Parser [Label]
> > > tier = do
> > > whiteSpace haskelldef
> > > string "item ["
> > > integer haskelldef
> > > string "]:"
> > > whiteSpace haskelldef
> > > try (string "class = \"IntervalTier\"")
> > > <|> string "class = \"TextTier\""
> > > whiteSpace haskelldef
> > > string "name = "
> > > char '"'
> > > name <- many quotedChar
> > > char '"' <?> "quote at end of cell"
> > > whiteSpace haskelldef
> > > string "xmin = "
> > > try (float haskelldef) <|> (fmap fromInteger $ integer haskelldef )
> > > whiteSpace haskelldef
> > > string "xmax = "
> > > try (float haskelldef) <|> (fmap fromInteger $ integer haskelldef )
> > > string "intervals: size = " <|> string "points: size = "
> > > integer haskelldef
> > > whiteSpace haskelldef
> > > labelList <- many1 (interval name)
> > > return $ labelList
> > > interval :: String -> Parser Label
> > > interval tierName = do
> > > whiteSpace haskelldef
> > > string "intervals ["
> > > integer haskelldef
> > > string "]:"
> > > whiteSpace haskelldef
> > > string "xmin = "
> > > start <- try (float haskelldef)
> > > <|> (fmap fromInteger $ integer haskelldef )
> > > whiteSpace haskelldef
> > > string "xmax = "
> > > end <- try (float haskelldef)
> > > <|> (fmap fromInteger $ integer haskelldef )
> > > whiteSpace haskelldef
> > > string "text = "
> > > char '"'
> > > text <- many quotedChar
> > > char '"' <?> "quote at end of cell"
> > > return $ Label tierName IntervalTier start end text
> > >
> > > which fails on the attached input file.
> > >
> > > I can't see how 't' is found?? What am I doing wrong?
> > >
> > > /Fredrik
> > >
> > >
> > >
> > > --
> > > "Life is like a trumpet - if you don't put anything into it, you don't
> > get
> > > anything out of it."
> >
> >
> >
> > > _______________________________________________
> > > Haskell-Cafe mailing list
> > > Haskell-Cafe at haskell.org
> > > http://www.haskell.org/mailman/listinfo/haskell-cafe
> >
> >
>
>
> --
> "Life is like a trumpet - if you don't put anything into it, you don't get
> anything out of it."
More information about the Haskell-Cafe
mailing list