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

📄 instr.g

📁 Java写的词法/语法分析器。可生成JAVA语言或者是C++的词法和语法分析器。并可产生语法分析树和对该树进行遍历
💻 G
字号:
header {#include "antlr/CommonASTWithHiddenTokens.hpp"#include "antlr/TokenStreamHiddenTokenFilter.hpp"#include <iostream>}options {	language="Cpp";}class InstrParser extends Parser;options {	buildAST = true;	k=2;}tokens {	CALL; // define imaginary token CALL}slist	:	( stat )+	;stat:	LBRACE^ (stat)+ RBRACE	|	"if"^ expr "then" stat ("else" stat)?	|	ID ASSIGN^ expr SEMI	|	call	;expr	:	mexpr (PLUS^ mexpr)*	;mexpr	:	atom (STAR^ atom)*	;atom:	INT	|	ID	;call:	ID LPAREN (expr)? RPAREN SEMI		{#call = #(#[CALL,"CALL"], #call);}	;{#include "InstrParser.hpp"}class InstrLexer extends Lexer;options {	charVocabulary = '\3'..'\377';}WS_	:	(' '		|	'\t'		|	('\n'|'\r'('\n')) {newline();}		)+	;// Single-line commentsSL_COMMENT	:	"//"		(~('\n'|'\r'))* ('\n'|'\r'('\n')?)		{newline();}	;LBRACE:	'{'	;RBRACE:	'}'	;LPAREN:	'('	;RPAREN:	')'	;STAR:	'*'	;PLUS:	'+'	;SEMI:	';'	;ASSIGN	:	'='	;protectedDIGIT	:	'0'..'9'	;INT	:	(DIGIT)+	;ID	:	('a'..'z')+	;class InstrTreeWalker extends TreeParser;{public:	void setFilter(ANTLR_USE_NAMESPACE(antlr)TokenStreamHiddenTokenFilter& filter);private:	ANTLR_USE_NAMESPACE(antlr)TokenStreamHiddenTokenFilter* filter;	void dumpHidden(ANTLR_USE_NAMESPACE(antlr)RefToken t);	void pr(ANTLR_USE_NAMESPACE(antlr)RefAST p);}slist	:	{dumpHidden(filter->getInitialHiddenToken());}		(stat)+	;stat:	#(LBRACE {pr(#LBRACE);} (stat)+ RBRACE {pr(#RBRACE);})	|	#(i:"if" {pr(i);} expr t:"then" {pr(t);} stat (e:"else" {pr(e);} stat)?)	|	#(ASSIGN ID {pr(#ID); pr(#ASSIGN);} expr SEMI {pr(#SEMI);} )	|	call	;expr	:	#(PLUS expr {pr(#PLUS);} expr)	|	#(STAR expr {pr(#STAR);} expr)	|	INT {pr(#INT);}	|	ID  {pr(#ID);}	;call:	{		// add instrumentation about call; manually call rule		callDumpInstrumentation(#call);		}		#(CALL ID {pr(#ID);}		  LPAREN {pr(#LPAREN);} (expr)? RPAREN {pr(#RPAREN);}		  SEMI		  {		  // print SEMI manually; need '}' between it and whitespace		  std::cout << #SEMI->getText();		  std::cout << "}"; // close {...} of instrumentation		  dumpHidden(			(ANTLR_USE_NAMESPACE(antlr)RefCommonASTWithHiddenTokens(#SEMI))->getHiddenAfter()		  );		  }		)	;/** Dump instrumentation for a call statement. *  The reference to rule expr prints out the arg *  and then at the end of this rule, we close the *  generated called to dbg.invoke(). */callDumpInstrumentation	:	#(CALL id:ID		  {std::cout << "{dbg.invoke(\"" << id->getText() << "\", \"";}		  LPAREN (e:expr)? RPAREN SEMI		  {std::cout << "\"); ";}		)	;

⌨️ 快捷键说明

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