Support pragma comments.
This commit is contained in:
parent
0964dd99c5
commit
ba8465abd2
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
%{
|
%{
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999 Stephen Williams (steve@icarus.com)
|
* Copyright (c) 1999-2002 Stephen Williams (steve@icarus.com)
|
||||||
*
|
*
|
||||||
* This source code is free software; you can redistribute it
|
* This source code is free software; you can redistribute it
|
||||||
* and/or modify it in source code form under the terms of the GNU
|
* and/or modify it in source code form under the terms of the GNU
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: lexor.lex,v 1.29 2002/01/06 04:51:31 steve Exp $"
|
#ident "$Id: lexor.lex,v 1.30 2002/02/15 05:20:58 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -89,6 +89,7 @@ static int comment_enter = 0;
|
||||||
%x PPINCLUDE
|
%x PPINCLUDE
|
||||||
%x PPDEFINE
|
%x PPDEFINE
|
||||||
%x CCOMMENT
|
%x CCOMMENT
|
||||||
|
%x PCOMENT
|
||||||
%x CSTRING
|
%x CSTRING
|
||||||
%x ERROR_LINE
|
%x ERROR_LINE
|
||||||
|
|
||||||
|
|
@ -111,6 +112,15 @@ W [ \t\b\f]+
|
||||||
<CCOMMENT>\n { istack->lineno += 1; ECHO; }
|
<CCOMMENT>\n { istack->lineno += 1; ECHO; }
|
||||||
<CCOMMENT>"*/" { BEGIN(comment_enter); ECHO; }
|
<CCOMMENT>"*/" { BEGIN(comment_enter); ECHO; }
|
||||||
|
|
||||||
|
/* Detect and pass multiline pragma comments. As with C-style
|
||||||
|
comments, pragma comments are passed through, and CPP directives
|
||||||
|
contained within are ignored. */
|
||||||
|
|
||||||
|
"(*" { comment_enter = YY_START; BEGIN(PCOMENT); ECHO; }
|
||||||
|
<PCOMENT>. { ECHO; }
|
||||||
|
<PCOMENT>\n { istack->lineno += 1; ECHO; }
|
||||||
|
<PCOMENT>"*)" { BEGIN(comment_enter); ECHO; }
|
||||||
|
|
||||||
/* Strings do not contain macros or preprocessor directives. */
|
/* Strings do not contain macros or preprocessor directives. */
|
||||||
\" { comment_enter = YY_START; BEGIN(CSTRING); ECHO; }
|
\" { comment_enter = YY_START; BEGIN(CSTRING); ECHO; }
|
||||||
<CSTRING>\\\" { yymore(); }
|
<CSTRING>\\\" { yymore(); }
|
||||||
|
|
|
||||||
17
lexor.lex
17
lexor.lex
|
|
@ -19,7 +19,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: lexor.lex,v 1.68 2001/12/29 19:00:13 steve Exp $"
|
#ident "$Id: lexor.lex,v 1.69 2002/02/15 05:20:58 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -95,6 +95,7 @@ static int comment_enter;
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%x CCOMMENT
|
%x CCOMMENT
|
||||||
|
%x PCOMMENT
|
||||||
%x LCOMMENT
|
%x LCOMMENT
|
||||||
%x CSTRING
|
%x CSTRING
|
||||||
%s UDPTABLE
|
%s UDPTABLE
|
||||||
|
|
@ -110,15 +111,29 @@ W [ \t\b\f\r]+
|
||||||
[ \t\b\f\r] { ; }
|
[ \t\b\f\r] { ; }
|
||||||
\n { yylloc.first_line += 1; }
|
\n { yylloc.first_line += 1; }
|
||||||
|
|
||||||
|
/* C++ style comments start with / / and run to the ene of the
|
||||||
|
current line. These are very easy to handle. */
|
||||||
|
|
||||||
"//".* { comment_enter = YY_START; BEGIN(LCOMMENT); }
|
"//".* { comment_enter = YY_START; BEGIN(LCOMMENT); }
|
||||||
<LCOMMENT>. { yymore(); }
|
<LCOMMENT>. { yymore(); }
|
||||||
<LCOMMENT>\n { yylloc.first_line += 1; BEGIN(comment_enter); }
|
<LCOMMENT>\n { yylloc.first_line += 1; BEGIN(comment_enter); }
|
||||||
|
|
||||||
|
|
||||||
|
/* The contents of C-style comments are ignored, like white space. */
|
||||||
|
|
||||||
"/*" { comment_enter = YY_START; BEGIN(CCOMMENT); }
|
"/*" { comment_enter = YY_START; BEGIN(CCOMMENT); }
|
||||||
<CCOMMENT>. { yymore(); }
|
<CCOMMENT>. { yymore(); }
|
||||||
<CCOMMENT>\n { yylloc.first_line += 1; yymore(); }
|
<CCOMMENT>\n { yylloc.first_line += 1; yymore(); }
|
||||||
<CCOMMENT>"*/" { BEGIN(comment_enter); }
|
<CCOMMENT>"*/" { BEGIN(comment_enter); }
|
||||||
|
|
||||||
|
/* Pragma comments are very similar to C-style comments, except that
|
||||||
|
they are allowed to carry tool-specific pragma strings. */
|
||||||
|
|
||||||
|
"(*" { comment_enter = YY_START; BEGIN(PCOMMENT); }
|
||||||
|
<PCOMMENT>. { yymore(); }
|
||||||
|
<PCOMMENT>\n { yylloc.first_line += 1; yymore(); }
|
||||||
|
<PCOMMENT>"*)" { BEGIN(comment_enter); }
|
||||||
|
|
||||||
"<<" { return K_LS; }
|
"<<" { return K_LS; }
|
||||||
">>" { return K_RS; }
|
">>" { return K_RS; }
|
||||||
"<=" { return K_LE; }
|
"<=" { return K_LE; }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue