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

📄 test.g

📁 本工具提供一个词法分析器和语法分析器的集成开发环境
💻 G
字号:
/* This is test.g which tests a simple DLG-based scanner. * No garbage collection for tokens since our token can't * handle ref counting. *//* ANTLR will assign token type numbers (by creating an enum which you * get in tokens.h) */<</* user must define ANTLRToken */typedef char ANTLRChar;class ANTLRToken : public ANTLRAbstractToken {protected:    ANTLRTokenType _type;	// what's the token type of the token object    int _line;			// track line info for errors	/* For our simple purposes, a token and a string is enough for	 * our attribute	 */	ANTLRChar _text[30];public:	ANTLRToken(ANTLRTokenType t, ANTLRChar *s)        { setType(t); _line = 0; setText(s); }	/* Your derived class MUST have a blank constructor. */    ANTLRToken()		{ setType((ANTLRTokenType)0); _line = 0; setText(""); }	// how to access the token type and line number stuff    ANTLRTokenType getType() const   { return _type; }    void setType(ANTLRTokenType t)   { _type = t; }    virtual int getLine() const      { return _line; }    void setLine(int line)           { _line = line; }    //    //  warning - casting away const in ANTLRToken::getText() const    //	ANTLRChar *getText() const       { return (ANTLRChar *) _text; }	void setText(const ANTLRChar *s) { strncpy(_text, s, 30); }	/* WARNING WARNING WARNING: you must return a stream of distinct tokens */	/* This function will disappear when I can use templates */	virtual ANTLRAbstractToken *makeToken(ANTLRTokenType tt,										  ANTLRChar *txt,										  int line)		{			ANTLRAbstractToken *t = new ANTLRToken(tt,txt);			t->setLine(line);			return t;		}};/* "DLGLexer" must match what you use on DLG command line (-cl); * "DLGLexer" is the default. */#include "DLGLexer.h"		/* include definition of DLGLexer.							 * This cannot be generated automatically because							 * ANTLR has no idea what you will call this file							 * with the DLG command-line options.							 */int main(){	DLGFileInput in(stdin);	/* create input stream for DLG to get chars from */	DLGLexer scan(&in);		/* create scanner reading from stdin */	ANTLRTokenBuffer pipe(&scan);/* make buffered pipe between lexer&parser */	ANTLRTokenPtr aToken=new ANTLRToken; // create a token to fill in for DLG	scan.setToken(mytoken(aToken));	Expr parser(&pipe);		/* create parser of type Expr hooked to scanner */	parser.init();			/* init the parser; prime lookahead etc... */	parser.e();				/* start parsing at rule 'e' of that parser */	return 0;}>>#token "[\ \t\n]+"	<<skip();>>#token Eof "@"#tokclass My { IDENTIFIER NUMBER }class Expr {				/* Define a grammar class */e	:	My My Eof		<<fprintf(stderr, "text is %s,%s\n", $1->getText(), $2->getText());>>	;}#token IDENTIFIER	"[a-z]+"#token NUMBER		"[0-9]+"

⌨️ 快捷键说明

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