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

📄 test.g

📁 SRI international 发布的OAA框架软件
💻 G
字号:
/* C++ interface test of Parser Exception Handling
 *
 * Given input:
 *
 *		if a+ then a=b+b;
 *
 * the program should respond with
 *
 *		invalid conditional in 'if' statement
 *		found assignment to a
 */
<<
#include <stream.h>
#include "DLGLexer.h"
#include "PBlackBox.h"
typedef ANTLRCommonToken ANTLRToken;

int main()
{
	ParserBlackBox<DLGLexer, PEHTest, ANTLRToken> p(stdin);
	int retsignal;
	p.parser()->rule(&retsignal);
	return 0;
}
>>

/*
Uncommenting this will make ANTLR think you put these handlers at the
end of each rule:

exception
	catch MismatchedToken	: <<printf("dflt:MismatchedToken\n");>>
	default : <<printf("dflt:dflt\n");>>
*/

#token "[\ \t]+"	<<skip();>>
#token "\n"			<<skip(); newline();>>
#token THEN	"then"
#tokclass DIE { "@" "if" ID "else" }

class PEHTest {

rule:	( stat )+
	;

stat:	"if" t:expr THEN stat { "else" stat }
	|	id:ID "=" expr ";"
		<<printf("found assignment to %s\n", $id->getText());>>
	;
  	exception[t]
		default	:
			<<
			printf("invalid conditional in 'if' statement\n");
			consumeUntilToken(THEN);
            suppressSignal;
			>>
  	exception
		catch MismatchedToken	:
		catch NoViableAlt		:
		catch NoSemViableAlt	:
			<<
			printf("stat:caught predefined signal\n");
			consumeUntil(DIE_set);
            suppressSignal;
			>>

expr:	expr1 ("\+" expr1)*
	;

expr1
	:	expr2 ("\*" expr2)*
	;

expr2:	ID
	;

}

#token ID "[a-z]+"

⌨️ 快捷键说明

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