diff --git a/src/language.yacc b/src/language.yacc
index 3cc1a30ea272434849b04cb309d13fc3ebff1538..fb0abfb3b1f06390c8a56238afe0d490be4d1fb5 100644
--- a/src/language.yacc
+++ b/src/language.yacc
@@ -179,7 +179,7 @@
 /* This is the grammar definition of Pike. */
 
 #include "global.h"
-RCSID("$Id: language.yacc,v 1.98 1998/06/06 13:50:44 grubba Exp $");
+RCSID("$Id: language.yacc,v 1.99 1998/07/31 21:51:31 hubbe Exp $");
 #ifdef HAVE_MEMORY_H
 #include <memory.h>
 #endif
@@ -1260,6 +1260,7 @@ safe_lvalue: lvalue
   ;
 
 safe_expr0: expr0
+  | F_LEX_EOF { yyerror("Unexpected end of file."); $$=mkintnode(0); }
   | error { $$=mkintnode(0); }
   ;
 
@@ -1267,7 +1268,7 @@ foreach: F_FOREACH
   {
     $<number>$=compiler_frame->current_number_of_locals;
   }
-  '(' safe_expr0 ',' safe_lvalue end_cond statement
+  '(' expr0 ',' safe_lvalue end_cond statement
   {
     if ($6) {
       $$=mknode(F_FOREACH, mknode(F_VAL_LVAL,$4,$6),$8);