⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lextokenstream.cpp

📁 Java写的词法/语法分析器。可生成JAVA语言或者是C++的词法和语法分析器。并可产生语法分析树和对该树进行遍历
💻 CPP
字号:
//#include <iostream>#include "LexTokenStream.hpp"#include "antlr/CommonToken.hpp"extern "C" {	extern char* yytext;	extern int yylex();	extern int yyrestart(std::FILE*);}static LexTokenStream* currentLexer=0;extern "C"void newLine(){	currentLexer->newLine();}LexTokenStream::LexTokenStream(std::FILE* fp){	yyrestart(fp);	reachedEOF = false;	line = 1;}void LexTokenStream::newLine(){	++line;}ANTLR_USE_NAMESPACE(antlr)RefToken LexTokenStream::nextToken(){	ANTLR_USE_NAMESPACE(antlr)RefToken ret;	if (!reachedEOF) {		int type;		currentLexer = this;		while ((type = yylex()) == -1) // Token::SKIP			;		if (type != 0) {			ret = ANTLR_USE_NAMESPACE(antlr)RefToken(new ANTLR_USE_NAMESPACE(antlr)CommonToken(type,yytext));//			cout << "Read token " << type << " [" << yytext << "]" << endl;		} else			reachedEOF = true;	}	if (reachedEOF) {		ret = ANTLR_USE_NAMESPACE(antlr)RefToken(new ANTLR_USE_NAMESPACE(antlr)CommonToken(1,"EOF"));//		cout << "EOF reached" << endl;	}	ret->setLine(line);	return ret;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -