%{ /* * Copyright (C) 1999, 2000, 2001 Lorenzo Bettini * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ static int lineno = 1 ; /* number of scanned lines */ char linebuf[1024] ; /* current code line in the source */ int tokenpos = 0 ; // current token position in the current line #include "tags.h" #include "tokens.h" #include "colors.h" #include "genfun.h" %} %option prefix="java_scanner_" %option noyywrap ws [ ]+ tabs [\t]+ nl \n cr \r IDE [a-zA-Z_]([a-zA-Z0-9_])* wspace [ \t\n\r] STRING \"[^\"\n]*\" not_alpha [^a-zA-Z0-9] %s COMMENT_STATE %s SINGLELINE_COMMENT %s STRING_STATE %s CHAR_STATE keyword (abstract|assert|break|case|catch|class|const|continue|default|do|else|extends|final|finally|for|goto|if|implements|instanceof|interface|native|new|null|package|private|protected|public|return|static|super|switch|synchronized|throw|throws|this|transient|try|volatile|while) basetype (int|byte|boolean|char|long|float|double|short|void) symbol [\~\!\%\^\*\(\)\-\+\=\[\]\|\\\:\;,円\.\/\?\&\<\>] funccall {IDE}/{wspace}*\( %% \r {} "/*" { BEGIN COMMENT_STATE ; startComment( yytext ) ; } "/*".*"*/" { generateComment( yytext ) ; } \n { endComment (""); ++lineno; generateNewLine() ; if (true) { startComment (""); } else { for (int i = 0; i < 10; ++i) { ; // do nothing, just to test the { } } } /* if we encounter another // during a comment we simply treat it as a ordinary string */ } "*/" { endComment(yytext) ; BEGIN INITIAL ; /* end of the comment */ } "//" { BEGIN SINGLELINE_COMMENT ; startComment( yytext ) ; } \n { BEGIN INITIAL ; yyless (0); // put the \n back endComment( yytext ) ; /* if we encounter another // during a comment we simply treat it as a ordinary string */ } \" { BEGIN STRING_STATE ; startString( yytext ); } \\\\ { generate_preproc( yytext ) ; } "\\\"" { generate_preproc( yytext ) ; } \n { endString (""); ++lineno; generateNewLine() ; startString (""); } \" { BEGIN INITIAL ; endString( yytext ) ; } \' { BEGIN CHAR_STATE ; startString( yytext ); } \\\\ { generate_preproc( yytext ) ; } "\\\'" { generate_preproc( yytext ) ; } \' { BEGIN INITIAL ; endString( yytext ) ; } {keyword} { generateKeyWord( yytext ) ; } {basetype} { generateBaseType( yytext ) ; } {symbol} { generateSymbol( yytext ); } [\{\}] { generateCBracket ( yytext ); } 0[xX][0-9a-fA-F]* { generateNumber( yytext ) ; } [0-9][0-9]*(\.[0-9]*[eE]?[-+]?[0-9]*)? { generateNumber( yytext ) ; } {keyword}/{wspace}*\( { generateKeyWord( yytext ) ; } {basetype}/{wspace}*\( { generateBaseType( yytext ) ; } {funccall} { generateFunction ( yytext ); } import { generatePreProc( yytext) ; } [a-zA-Z_]([a-zA-Z0-9_])* { generate_normal( yytext ) ; } \t { generateTab() ; } . { generate_preproc( yytext ) ; /* anything else */ } \n { ++lineno; generateNewLine() ; } %% void yyerror( char *s ) ; void yyerror( char *s ) { fprintf( stderr, "%d: %s: %s\n%s\n", lineno, s, yytext, linebuf ) ; fprintf( stderr, "%*s\n", tokenpos, "^" ) ; } void yyerror( const std::string &s ) { yyerror(s.c_str()); } /* vim:set ft=flex expandtab cindent tabstop=4 softtabstop=4 shiftwidth=4 textwidth=0: */

AltStyle によって変換されたページ (->オリジナル) /