summaryrefslogtreecommitdiff
path: root/ghc/compiler/parser/Parser.y
diff options
context:
space:
mode:
authorsimonmar <unknown>1999-07-27 09:25:50 +0000
committersimonmar <unknown>1999-07-27 09:25:50 +0000
commitf292cce21eb71ef844c9067c66f56d871488cab9 (patch)
tree0d34bd77fae1b0dae3794f30f250fcd1f4b03f53 /ghc/compiler/parser/Parser.y
parent9886cd1d6fd6ab980e05ebd5c39368710d82e3d7 (diff)
downloadhaskell-f292cce21eb71ef844c9067c66f56d871488cab9.tar.gz
[project @ 1999-07-27 09:25:49 by simonmar]
Back out yesterday's change to Parser.y, and throw out illegal do expressions in the renamer instead. It turned out to be hard to get the optional semicolons right in the grammar at the same time as checking that the last statement is an expression.
Diffstat (limited to 'ghc/compiler/parser/Parser.y')
-rw-r--r--ghc/compiler/parser/Parser.y27
1 files changed, 16 insertions, 11 deletions
diff --git a/ghc/compiler/parser/Parser.y b/ghc/compiler/parser/Parser.y
index 066bc1c150..0a44b9420d 100644
--- a/ghc/compiler/parser/Parser.y
+++ b/ghc/compiler/parser/Parser.y
@@ -1,6 +1,10 @@
{-
-----------------------------------------------------------------------------
-$Id: Parser.y,v 1.12 1999/07/27 07:31:18 simonpj Exp $
+<<<<<<< Parser.y
+$Id: Parser.y,v 1.13 1999/07/27 09:25:49 simonmar Exp $
+=======
+$Id: Parser.y,v 1.13 1999/07/27 09:25:49 simonmar Exp $
+>>>>>>> 1.10
Haskell grammar.
@@ -759,20 +763,21 @@ gdpat :: { RdrNameGRHS }
-- Statement sequences
stmtlist :: { [RdrNameStmt] }
- : '{' stmts '}' { $2 }
- | layout_on_for_do stmts close { $2 }
+ : '{' stmts '}' { reverse $2 }
+ | layout_on_for_do stmts close { reverse $2 }
+
+-- Stmt list should really end in an expression, but it's not
+-- convenient to enforce this here, so we throw out erroneous
+-- statement sequences in the renamer instead.
--- Stmt list must end in an expression
--- thought the H98 report doesn't currently say so in the syntax
stmts :: { [RdrNameStmt] }
- : stmts1 srcloc exp { reverse (ExprStmt $3 $2 : $1) }
+ : ';' stmts1 { $2 }
+ | stmts1 { $1 }
--- A list of zero or more stmts, ending in semicolon
--- Returned in *reverse* order
stmts1 :: { [RdrNameStmt] }
- : stmts1 stmt ';' { $2 : $1 }
- | stmts1 ';' { $1 }
- | { [] }
+ : stmts1 ';' stmt { $3 : $1 }
+ | stmts1 ';' { $1 }
+ | stmt { [$1] }
stmt :: { RdrNameStmt }
: srcloc infixexp '<-' exp {% checkPattern $2 `thenP` \p ->