test.g

来自「本工具提供一个词法分析器和语法分析器的集成开发环境」· G 代码 · 共 80 行

G
80
字号
/* 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 theend 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 + =
减小字号Ctrl + -
显示快捷键?