|
What this is
Other links
The source code/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2002 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.tax.decl.parser;
import java.io.*;
import org.netbeans.tax.*;
/**
* A simple kind of reader with some enhanced methods
* suitable for parsing purposes.
*/
public class ParserReader extends PushbackReader {
/** */
// private TreeElementDecl elementDecl;
//
// init
//
public ParserReader (String source) {
super (new StringReader (source), 20);
// this.elementDecl = elementDecl;
}
//
// itself
//
// /**
// */
// public final TreeElementDecl getRoot () {
// return elementDecl;
// }
/** Trim out starting whitespaces. */
public ParserReader trim () {
int ch;
while ( true ) {
// read until non WS or EOF
try {
ch = read ();
if (ch == -1 || ! Character.isWhitespace ((char)ch))
break;
} catch (IOException ex) {
ex.printStackTrace ();
}
}
try {
if (ch != -1) unread (ch);
} catch (IOException ex) {
ex.printStackTrace ();
}
return this;
}
/** SE: Move on if true with otherwise push back.
* @return true if prefix is at the beginig of the stream
*/
public boolean startsWith (String prefix) {
char buf[] = new char[prefix.length ()];
try {
read (buf);
// if ( Util.THIS.isLoggable() ) /* then */ Util.THIS.debug("startsWith(" + prefix + " got " + new String(buf)); // NOI18N
boolean ret = new String (buf).equals (prefix);
if (ret) return true;
} catch (IOException ex) {
ex.printStackTrace ();
return false;
}
try {
unread (buf);
} catch (IOException ex) {
ex.printStackTrace ();
}
return false;
}
/** @return next character or -1 */
public int peek () {
try {
int ch = read ();
unread (ch);
return ch;
} catch (IOException ex) {
return -1;
}
}
/** @return whitespace or "()?+*" separated token or "". */ // NOI18N
public String getToken () {
StringBuffer sb = new StringBuffer ();
int ch = -1;
trim ();
boolean reading = true; //is a char in reading buffer
int len = 0;
try {
readChars:
while (reading) { //read until token recognized
ch = read ();
if ( ch == -1 || Character.isWhitespace ((char)ch) )
break;
switch (ch) {
//do not eat interesting chars
case ')': case '(': case '?': case '+': case '*':
break readChars;
//these are tokens alone
case ',': case '|':
if (len == 0) {
reading = false; // finnish, no unread
} else {
break readChars; // finnish current token
}
}
sb.append ((char)ch);
len++;
}
if (ch != -1 && reading) unread (ch);
} catch (IOException ex) {
// return most of recognized
}
String toret = sb.toString ();
// if ( Util.THIS.isLoggable() ) /* then */ Util.THIS.debug("Token: " + toret); // NOI18N
return toret;
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.