BrowserCommandLexer.lex Source Code
/* BrowserCommandLexer.java is a generated file. You probably want to
* edit BrowserCommandLexer to make changes. Use JFlex to generate it.
* JFlex may be obtained from
* <a href="http://www.jflex.de">the JFlex website</a>.
* Jflex 1.4 or later is required.
* Run:<br>
* jflex BrowserCommandLexer<br>
* You will then have a file called BrowserCommandLexer.java
*/
/*
* Tokenize a command line into application and arguments.
* Copyright (C) 2001-2010 Stephen Ostermiller
* http://ostermiller.org/contact.pl?regarding=Java+Utilities
*
* 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.
*
* See LICENSE.txt for details.
*/
package com.Ostermiller.util;
import java.io.*;
/**
* Tokenize a command line into application and arguments.
*
* @author Stephen Ostermiller http://ostermiller.org/contact.pl?regarding=Java+Utilities
* @since ostermillerutils 1.00.00
*/
%%
%class BrowserCommandLexer
%apiprivate
%function getToken
%type String
%{
/**
* Return the next token from the browser command.
*
* @return the next token
* @throws IOException if an error occurs while reading the command.
*/
public String getNextToken() throws IOException {
return getToken();
}
private static String unescape(String s){
StringBuffer sb = new StringBuffer(s.length());
for (int i=0; i<s.length(); i++){
if (s.charAt(i) == '\\' && i<s.length()){
i++;
}
sb.append(s.charAt(i));
}
return sb.toString();
}
%}
%unicode
AnyChar=([^])
Escape=([\\]{AnyChar})
NonQuoted=((([^\t\f\r\n\\ ])|{Escape})*)
Quoted=([\"]([^\"]|{Escape})*[\"])
%%
<YYINITIAL> ({Quoted}) {
return unescape(yytext().substring(1, yytext().length()-1));
}
<YYINITIAL> ({NonQuoted}) {
return unescape(yytext());
}
<YYINITIAL> {AnyChar} {
// Do nothing
}