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

📄 validator.g

📁 c--词法分析
💻 G
字号:
tree grammar Validator;options{	tokenVocab = CMinus;	ASTLabelType = CommonTree;}@header{	import java.util.HashMap;	import java.util.Vector;	import java.util.Map;	import java.io.*;}@members{	}program	@init{	Main.symbols.reset_globals();}:	 ^(PROGRAM ^(VARIABLES varDecl*) ^(FUNCTIONS funDecl*) call) EOF	;funDecl	:	^(FUNCTION type=TYPE name=ID ^(PARAMATERS .*) {Main.symbols.enter_frame($name.text);} block {Main.symbols.exit_frame();})	;	varDecl	:	^(VARDEF TYPE name=ID) 		{Main.symbols.declare_variable($name.text,$TYPE.text);}	|	^(ARRDEF TYPE name=ID size=INT)	{Main.symbols.declare_array($name.text,$TYPE.text,Integer.parseInt($size.text));}	;	block@init{	Main.symbols.enter_block();}@after{	Main.symbols.exit_block();}	:	^(BLOCK ^(VARIABLES varDecl*) ^(STMTS stmt*))	;	stmt		:	expr		| ^(RETURN expr)			| ^(READ name=ID)	{Main.symbols.test_declared($name.text);}		| ^(WRITE expr)				| WRITELN				| BREAK					| ifStmt		| whileStmt		| block		| NOP	;	whileStmt	: ^(WHILE expr stmt)	;ifStmt	:	 ^(IF ^(EXPR expr) stmt stmt)	;		expr	:	^(('or'|'||') expr expr)				| ^(('and'|'&&') expr expr)				| ^('==' expr expr)					| ^('!=' expr expr)					| ^('>' expr expr)					| ^('<' expr expr)					| ^('>=' expr expr)					| ^('<=' expr expr)					| ^('<>' expr expr)					| ^('+' expr expr) 					| ^('-' expr expr) 					| ^('*' expr expr) 					| ^('/' expr expr) 					| ^(NEGATE expr)					| ^(NOT expr)						| ^(NUM INT)						| ^(VAR ID)				{Main.symbols.test_declared($ID.text);}		| ^(INDEX ID expr)			{Main.symbols.test_declared($ID.text);}		| ^(PREFIX ^(VAR ID) ^(NUM INT))	{Main.symbols.test_declared($ID.text);}		| ^(POSTFIX ^(VAR ID) ^(NUM INT))	{Main.symbols.test_declared($ID.text);}		| call							| ^(ASSIGN ID expr)			{Main.symbols.test_declared($ID.text);Main.symbols.test_assign($ID.text);}		| ^(ASSIGN ^(INDEX ID expr) expr) 	{Main.symbols.test_declared($ID.text);Main.symbols.test_assign($ID.text);}		;call@init{	int arg_count=0;}	: ^(CALL ID ^(EXPRLIST (expr {arg_count++;})*))	{		Function fcn=Main.symbols.get_function($ID.text);		if(fcn.params.size()!=arg_count){			Main.print_err("Invalid number of arguments to function '"+fcn.name+"'");		}	}	; 

⌨️ 快捷键说明

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