Исходный файл 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++; }