on master help sign in
Simplified some lookaheads and grammar rules for
08fbb4eAhmad Salim Al-Sibahi
src/Idris/ParseExpr.hs+27−22
@@ -209,9 +209,9 @@ internalExpr :: SyntaxInfo -> IdrisParser PTerm
209internalExpr syn =
209internalExpr syn =
210 try (app syn)
210 try (app syn)
211 <|> try (matchApp syn)
211 <|> try (matchApp syn)
212− <|> try (unifyLog syn)
212+ <|> unifyLog syn
213 <|> try (disamb syn)
213 <|> try (disamb syn)
214− <|> try (noImplicits syn)
214+ <|> noImplicits syn
215 <|> recordType syn
215 <|> recordType syn
216 <|> lambda syn
216 <|> lambda syn
217 <|> quoteGoal syn
217 <|> quoteGoal syn
@@ -289,7 +289,7 @@ SimpleExpr ::=
289 | Comprehension
289 | Comprehension
290 | Alt
290 | Alt
291 | Idiom
291 | Idiom
292− | '(' Bracketed
292+ | Bracketed
293 | Constant
293 | Constant
294 | Type
294 | Type
295 | '_|_'
295 | '_|_'
@@ -328,8 +328,7 @@ simpleExpr syn =
328 s <- simpleExpr syn
328 s <- simpleExpr syn
329 fc <- getFC
329 fc <- getFC
330 return (PAppBind fc s [])
330 return (PAppBind fc s [])
331− <|> do lchar '('
332− bracketed (disallowImp syn)
331+ <|> bracketed (disallowImp syn)
333 <|> do symbol "_|_"
332 <|> do symbol "_|_"
334 fc <- getFC
333 fc <- getFC
335 return (PFalse fc)
334 return (PFalse fc)
@@ -337,10 +336,16 @@ simpleExpr syn =
337 <|> simpleExternalExpr syn
336 <|> simpleExternalExpr syn
338 <?> "expression"
337 <?> "expression"
339
338
340−
339+{- |Parses an expression in braces
340+@
341+Bracketed ::= '(' Bracketed'
342+ -}
343+bracketed :: SyntaxInfo -> IdrisParser PTerm
344+bracketed syn = do lchar '(' <?> "parenthesized expression"
345+ bracketed' syn
341{- |Parses the rest of an expression in braces
346{- |Parses the rest of an expression in braces
342@
347@
343−Bracketed ::=
348+Bracketed' ::=
344 ')'
349 ')'
345 | Expr ')'
350 | Expr ')'
346 | ExprList ')'
351 | ExprList ')'
@@ -351,8 +356,8 @@ Bracketed ::=
351 ;
356 ;
352@
357@
353-}
358-}
354−bracketed :: SyntaxInfo -> IdrisParser PTerm
359+bracketed' :: SyntaxInfo -> IdrisParser PTerm
355−bracketed syn =
360+bracketed' syn =
356 do lchar ')'
361 do lchar ')'
357 fc <- getFC
362 fc <- getFC
358 return $ PTrue fc TypeOrTerm
363 return $ PTrue fc TypeOrTerm
@@ -502,7 +507,7 @@ UnifyLog ::=
502 ;
507 ;
503-}
508-}
504unifyLog :: SyntaxInfo -> IdrisParser PTerm
509unifyLog :: SyntaxInfo -> IdrisParser PTerm
505−unifyLog syn = do lchar '%'; reserved "unifyLog";
510+unifyLog syn = do try (lchar '%' *> reserved "unifyLog")
506 tm <- simpleExpr syn
511 tm <- simpleExpr syn
507 return (PUnifyLog tm)
512 return (PUnifyLog tm)
508 <?> "unification log expression"
513 <?> "unification log expression"
@@ -528,7 +533,7 @@ NoImplicits ::=
528@
533@
529-}
534-}
530noImplicits :: SyntaxInfo -> IdrisParser PTerm
535noImplicits :: SyntaxInfo -> IdrisParser PTerm
531−noImplicits syn = do lchar '%'; reserved "noImplicits";
536+noImplicits syn = do try (lchar '%' *> reserved "noImplicits")
532 tm <- simpleExpr syn
537 tm <- simpleExpr syn
533 return (PNoImplicits tm)
538 return (PNoImplicits tm)
534 <?> "no implicits expression"
539 <?> "no implicits expression"
@@ -700,17 +705,17 @@ SimpleExprList ::=
700@
705@
701-}
706-}
702lambda :: SyntaxInfo -> IdrisParser PTerm
707lambda :: SyntaxInfo -> IdrisParser PTerm
703−lambda syn = do lchar '\\'
708+lambda syn = do lchar '\\' <?> "lambda expression"
704− try (do xt <- tyOptDeclList syn
709+ (do xt <- try $ tyOptDeclList syn
705− symbol "=>"
710+ symbol "=>"
706− sc <- expr syn
711+ sc <- expr syn
707− return (bindList PLam xt sc)
712+ return (bindList PLam xt sc)) <|> do
708− <|> (do ps <- sepBy (do fc <- getFC
713+ ps <- sepBy (do fc <- getFC
709− e <- simpleExpr syn
714+ e <- simpleExpr syn
710− return (fc, e)) (lchar ',')
715+ return (fc, e)) (lchar ',')
711− symbol "=>"
716+ symbol "=>"
712− sc <- expr syn
717+ sc <- expr syn
713− return (pmList (zip [0..] ps) sc)))
718+ return (pmList (zip [0..] ps) sc)
714 <?> "lambda expression"
719 <?> "lambda expression"
715 where pmList :: [(Int, (FC, PTerm))] -> PTerm -> PTerm
720 where pmList :: [(Int, (FC, PTerm))] -> PTerm -> PTerm
716 pmList [] sc = sc
721 pmList [] sc = sc
src/Idris/ParseHelpers.hs+1−1
@@ -214,7 +214,7 @@ idrisStyle :: MonadicParsing m => IdentifierStyle m
214idrisStyle = IdentifierStyle _styleName _styleStart _styleLetter _styleReserved Hi.Identifier Hi.ReservedIdentifier
214idrisStyle = IdentifierStyle _styleName _styleStart _styleLetter _styleReserved Hi.Identifier Hi.ReservedIdentifier
215 where _styleName = "Idris"
215 where _styleName = "Idris"
216 _styleStart = satisfy isAlpha
216 _styleStart = satisfy isAlpha
217− _styleLetter = satisfy isAlphaNum <|> oneOf "_'" <|> (lchar '.')
217+ _styleLetter = satisfy isAlphaNum <|> oneOf "_'."
218 _styleReserved = HS.fromList ["let", "in", "data", "codata", "record", "Type",
218 _styleReserved = HS.fromList ["let", "in", "data", "codata", "record", "Type",
219 "do", "dsl", "import", "impossible",
219 "do", "dsl", "import", "impossible",
220 "case", "of", "total", "partial", "mutual",
220 "case", "of", "total", "partial", "mutual",
src/Idris/Parser.hs−2
@@ -831,7 +831,6 @@ clause syn
831 return $ PClause fc n capp wargs rs wheres) <|> (do
831 return $ PClause fc n capp wargs rs wheres) <|> (do
832 popIndent
832 popIndent
833 reserved "with"
833 reserved "with"
834− lchar '(' <?> "parenthesized expression"
835 wval <- bracketed syn
834 wval <- bracketed syn
836 openBlock
835 openBlock
837 ds <- some $ fnDecl syn
836 ds <- some $ fnDecl syn
@@ -865,7 +864,6 @@ clause syn
865 reserved "with"
864 reserved "with"
866 ist <- get
865 ist <- get
867 put (ist { lastParse = Just n })
866 put (ist { lastParse = Just n })
868− lchar '(' <?> "parenthesized expression"
869 wval <- bracketed syn
867 wval <- bracketed syn
870 openBlock
868 openBlock
871 ds <- some $ fnDecl syn
869 ds <- some $ fnDecl syn