Исходный файл Const (все
изменения выделены):
/**Для тех, кто не знает, как компилировать
такой файл:
java JLex.Main Const --> получится файл Const.java
javac Const.java --> как обычно получится Const.class
java Const file.name --> где file.name - имя файла, в
котором нужно искать константы.
*/
/** * Simple Example on Using JLex -- Java Version of LEX */ import java.io.*; import java.util.Vector;
class Yytoken extends Object { public int code; // To do... }
%%
%full
%{ int w = 0; // Number of words int c = 0; // Number of characters int l = 0; // Number of lines
// //------------------------------------------------------------- int v = 0; // Number of consts //------------------------------------------------------------- //
Vector vec = new Vector();
public static void main(String args[]) { Reader reader; try { if (args.length == 0) { reader = new InputStreamReader(System.in); } else { reader = new FileReader(args[0]); }
Yylex scanner = new Yylex(reader); scanner.yylex();
System.out.println( "Words: " + scanner.w + ", characters: " + scanner.c + ", lines: " + scanner.l );
// //----------------------------------------------------------- System.out.println("Number of const: " + scanner.v); System.out.print("Const: "); for (int i = 0; i < scanner.v; i++) { System.out.print(scanner.vec.elementAt(i) + " "); } //----------------------------------------------------------- //
} catch (IOException e) { System.out.println("I/O error: " + e); } } %}
LETTER [A-Za-z] SIGN ((\+|\-)?) EXP ((e|E)(\+|\-)?([0-9]+)) INTEGER ((\+|\-)?([0-9]+)) DOUBLE (\+|\-)?(([0-9]+\.[0-9]*)|(\.[0-9]+))
%%
({DOUBLE}{EXP}?)|({SIGN}{EXP})|({INTEGER}{EXP}) {v++; vec.addElement(yytext()); c+=yytext().length();} {LETTER}+ { w++; c += yytext().length(); } \r\n { c++; l++; } \n { c++; l++; } . { c++; }