octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: error: invalid character `' (ASCII 0) near line 164, column 2 (probl


From: Ben Abbott
Subject: Re: error: invalid character `' (ASCII 0) near line 164, column 2 (problem avoided)
Date: Thu, 31 Dec 2009 15:17:07 -0500

On Thursday, December 31, 2009, at 01:04PM, "Michael D Godfrey" 
<address@hidden> wrote:
>
> Ben,
> 
> I just looked on my Linux Fedora 12 system. It uses
> flex 2.3.5.  So, it appears that the Mac version must be broken
> in some way that is not just the wrong version.  So, you
> might try compiling the 2.3.5 version from sourceforge.
> They also have earlier versions available in case 2.3.5
> fails.
> 
> Michael
> 

Michael, do you mean "2.5.35"?

Using 2.5.35 from sourceforge, Octave no longer produces the (ASCII 0) errors!

I took a look at Apple's patches to flex. It looks to me like the one below is 
responsible.

http://www.opensource.apple.com/source/flex/flex-24.1/patches/scanEOF.diff

---------------
--- flex.skl+orig       2006-12-20 12:29:20.000000000 -0800
+++ flex.skl    2006-12-20 12:29:32.000000000 -0800
@@ -1818,7 +1818,7 @@ m4_ifdef( [[M4_YY_USE_LINENO]],
                                case EOB_ACT_END_OF_FILE:
                                        {
                                        if ( yywrap( M4_YY_CALL_ONLY_ARG ) )
-                                               return EOF;
+                                               return 0;
 
                                        if ( ! 
YY_G(yy_did_buffer_switch_on_eof) )
                                                YY_NEW_FILE;
---------------

Looking at my lex.cc produced using the sourceforge version of flex ...

2834 case 89:
2835 YY_RULE_SETUP
2836 #line 1032 "lex.ll"
2837 {
2838     LEXER_DEBUG (".");
2839 
2840     xunput (octave_text[0], octave_text);
2841 
2842     int c = text_yyinput ();
2843 
2844     if (c != EOF)
2845       {
2846         current_input_column++;
2847 
2848         error ("invalid character `%s' (ASCII %d) near line %d, column %d",
2849                undo_string_escape (static_cast<char> (c)), c,
2850                input_line_number, current_input_column);
2851 
2852         return LEXICAL_ERROR;
2853       }
2854     else
2855       TOK_RETURN (END_OF_INPUT);
2856   }
2857         YY_BREAK

When using Apple's flex, I was able to avoid the (ASCII 0) error by commenting 
out lines 2844-2854. Alternatively, we could modify lex.ll so that line 2844 
reads something like …

2844     if (! (c == EOF || (c == 0 && ismac ())))

The lines from lex.ll are below. Line 1039 is what needs to be changed.

1032 . {
1033     LEXER_DEBUG (".");
1034 
1035     xunput (yytext[0], yytext);
1036 
1037     int c = text_yyinput ();
1038 
1039     if (c != EOF)
1040       {
1041         current_input_column++;
1042 
1043         error ("invalid character `%s' (ASCII %d) near line %d, column %d",
1044                undo_string_escape (static_cast<char> (c)), c,
1045                input_line_number, current_input_column);
1046 
1047         return LEXICAL_ERROR;
1048       }
1049     else
1050       TOK_RETURN (END_OF_INPUT);
1051   }

I doubt "ismac()" is available. Forgive my lame attempt at cpp/c++, but would 
replacing line 1039 of lex.ll with the lines below work?

#if defined (__APPLE__) && defined (__MACH__)
     if (! (c == EOF || (c == 0 && ismac ())))
#else /* not MacOS X */
     if (c != EOF)
#endif

Ben




reply via email to

[Prev in Thread] Current Thread [Next in Thread]