本文整理汇总了C++中DFA::getTokenName方法的典型用法代码示例。如果您正苦于以下问题:C++ DFA::getTokenName方法的具体用法?C++ DFA::getTokenName怎么用?C++ DFA::getTokenName使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DFA
的用法示例。
在下文中一共展示了DFA::getTokenName方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: scanSource
void DFA::scanSource(Source &src, DFA &dfa,
Array<Token> &tokens, int scanOptions, Sink *sink,
bool verboseSink, bool withLexeme, const String *commentToken
)
{
#undef pt
#define pt(a) //pr(a)
pt(("DFA::scanSource\n"));
tokens.clear();
// build a scanner to extract tokens from a text file
Scanner scanner(scanOptions,&dfa);
#if DEBUG && 0
scanner.setEcho(true,true);
#endif
scanner.includeSource(src);
String work;
int prevLine = -1;
String sourceLine;
String tokenLine;
while (true) {
Token t;
scanner.read(t);
// it returns EOF if done
if (t.type(T_EOF))
break;
if (t.type(T_UNKNOWN)) {
scanner.addError("Unrecognized token");
continue;
}
tokens.add(t);
pt(("found token: %s\n",t.debInfo().chars() ));
if (sink) {
if (withLexeme) {
dfa.getTokenName(t.type(), work);
if (commentToken && work.equals(*commentToken))
continue;
*sink << work << " " << t.str().cpp(false) << "\n";
continue;
}
if (t.lineNumber() > prevLine) {
scanner.flushErrors();
if (prevLine >= 0) {
if (verboseSink) {
*sink << "# " << sourceLine << "\n";
}
*sink << tokenLine << "\n";
if (verboseSink)
*sink << "\n";
tokenLine.clear();
sourceLine.clear();
}
prevLine = t.lineNumber();
}
if (verboseSink) {
sourceLine.pad(t.linePos());
sourceLine << t.str();
}
// add token text to sink if necessary
dfa.getTokenName(t.type(), work);
if (verboseSink) {
tokenLine.pad(2 + t.linePos());
}
tokenLine << work << " ";
}
}
if (sink) {
if (sourceLine.defined() || tokenLine.defined()) {
if (verboseSink) {
*sink << "# " << sourceLine << "\n";
}
*sink << tokenLine << "\n";
}
}
}