Post by David Flanagansyntax error, unexpected "end-of-file", expecting "end"
It doesn't tell you where the outermost open block begins, but at least the message isn't so cryptic. I don't know any way to get rid of the quotes around "end-of-file".
This looks extremely helpful, in particular for (relative) beginners.
Looking at the patch below, it seems to be easy to improve things for
a few other cases, too. I just tried to fill in the blanks; maybe
some of this stuff doesn't make sense, but I have included a patch
below.
As for personal experiences, when I get an error of this kind,
I often add an "end" at some arbitrary place and see what happens.
Then I move that "end" around a bit and see again what happens.
That usually leads to a solution pretty quickly. Seems that sometimes
randomized algorithms are useful even for programming :-).
Regards, Martin.
Index: parse.y
===================================================================
--- parse.y (revision 13764)
+++ parse.y (working copy)
@@ -596,54 +596,55 @@
/*%
%token <val>
%*/
- keyword_class
- keyword_module
- keyword_def
- keyword_undef
- keyword_begin
- keyword_rescue
- keyword_ensure
- keyword_end
- keyword_if
- keyword_unless
- keyword_then
- keyword_elsif
- keyword_else
- keyword_case
- keyword_when
- keyword_while
- keyword_until
- keyword_for
- keyword_break
- keyword_next
- keyword_redo
- keyword_retry
- keyword_in
- keyword_do
- keyword_do_cond
- keyword_do_block
+ end_of_file 0 "end-of-file"
+ keyword_class "class"
+ keyword_module "module"
+ keyword_def "def"
+ keyword_undef "undef"
+ keyword_begin "begin"
+ keyword_rescue "rescue"
+ keyword_ensure "ensure"
+ keyword_end "end"
+ keyword_if "if"
+ keyword_unless "unless"
+ keyword_then "then"
+ keyword_elsif "elsif"
+ keyword_else "else"
+ keyword_case "case"
+ keyword_when "when"
+ keyword_while "while"
+ keyword_until "until"
+ keyword_for "for"
+ keyword_break "break"
+ keyword_next "next"
+ keyword_redo "redo"
+ keyword_retry "retry"
+ keyword_in "in"
+ keyword_do "do"
+ keyword_do_cond "do"
+ keyword_do_block "do"
keyword_do_LAMBDA
- keyword_return
- keyword_yield
- keyword_super
- keyword_self
- keyword_nil
- keyword_true
- keyword_false
- keyword_and
- keyword_or
- keyword_not
- modifier_if
- modifier_unless
- modifier_while
- modifier_until
- modifier_rescue
- keyword_alias
- keyword_defined
- keyword_BEGIN
- keyword_END
- keyword__LINE__
- keyword__FILE__
+ keyword_return "return"
+ keyword_yield "yield"
+ keyword_super "super"
+ keyword_self "self"
+ keyword_nil "nil"
+ keyword_true "true"
+ keyword_false "false"
+ keyword_and "and"
+ keyword_or "or"
+ keyword_not "not"
+ modifier_if "if"
+ modifier_unless "unless"
+ modifier_while "while"
+ modifier_until "until"
+ modifier_rescue "rescue"
+ keyword_alias "alias"
+ keyword_defined "defined"
+ keyword_BEGIN "BEGIN"
+ keyword_END "END"
+ keyword__LINE__ "__LINE__"
+ keyword__FILE__ "__FILE__"
%token <id> tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR tLABEL
%token <node> tINTEGER tFLOAT tSTRING_CONTENT tCHAR
#-#-# Martin J. Du"rst, Assoc. Professor, Aoyama Gakuin University
#-#-# http://www.sw.it.aoyama.ac.jp mailto:***@it.aoyama.ac.jp