/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.cpd;
import net.sourceforge.pmd.cpd.cppast.CPPParser;
import net.sourceforge.pmd.cpd.cppast.CPPParserTokenManager;
import net.sourceforge.pmd.cpd.cppast.Token;
import net.sourceforge.pmd.cpd.cppast.TokenMgrError;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
public class CPPTokenizer implements Tokenizer {
protected String EOL = System.getProperty("line.separator", "\n");
private static boolean initted;
public void tokenize(SourceCode sourceCode, Tokens tokenEntries) {
StringBuffer sb = sourceCode.getCodeBuffer();
try {
// now tokenize it
if (!initted) {
new CPPParser(new StringReader(sb.toString()));
initted = true;
}
CPPParser.ReInit(new StringReader(sb.toString()));
Token currToken = CPPParserTokenManager.getNextToken();
int count = 0;
while (currToken.image != "") {
count++;
tokenEntries.add(new TokenEntry(currToken.image, sourceCode.getFileName(), currToken.beginLine));
currToken = CPPParserTokenManager.getNextToken();
}
tokenEntries.add(TokenEntry.getEOF());
System.out.println("Added " + sourceCode.getFileName());
} catch (TokenMgrError err) {
System.out.println("Skipping " + sourceCode.getFileName() + " due to parse error");
List emptyCode = new ArrayList();
emptyCode.add("");
tokenEntries.add(TokenEntry.getEOF());
}
}
}