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

📄 testrewriteast.java

📁 antlr最新版本V3源代码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
			"tokens {BLOCK;}\n" +			"a : x+=b x+=b -> $x+;\n"+			"b : ID ;\n"+			"ID : 'a'..'z'+ ;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		String found = execParser("T.g", grammar, "TParser", "TLexer",				    "a", "a b", debug);		assertEquals("a b\n", found);	}	public void testRuleListLabel2() throws Exception {		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"tokens {BLOCK;}\n" +			"a : x+=b x+=b -> $x $x*;\n"+			"b : ID ;\n"+			"ID : 'a'..'z'+ ;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		String found = execParser("T.g", grammar, "TParser", "TLexer",				    "a", "a b", debug);		assertEquals("a b\n", found);	}	public void testOptional() throws Exception {		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"tokens {BLOCK;}\n" +			"a : x=b (y=b)? -> $x $y?;\n"+			"b : ID ;\n"+			"ID : 'a'..'z'+ ;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		String found = execParser("T.g", grammar, "TParser", "TLexer",				    "a", "a", debug);		assertEquals("a\n", found);	}	public void testOptional2() throws Exception {		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"tokens {BLOCK;}\n" +			"a : x=ID (y=b)? -> $x $y?;\n"+			"b : ID ;\n"+			"ID : 'a'..'z'+ ;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		String found = execParser("T.g", grammar, "TParser", "TLexer",				    "a", "a b", debug);		assertEquals("a b\n", found);	}	public void testOptional3() throws Exception {		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"tokens {BLOCK;}\n" +			"a : x=ID (y=b)? -> ($x $y)?;\n"+			"b : ID ;\n"+			"ID : 'a'..'z'+ ;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		String found = execParser("T.g", grammar, "TParser", "TLexer",				    "a", "a b", debug);		assertEquals("a b\n", found);	}	public void testOptional4() throws Exception {		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"tokens {BLOCK;}\n" +			"a : x+=ID (y=b)? -> ($x $y)?;\n"+			"b : ID ;\n"+			"ID : 'a'..'z'+ ;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		String found = execParser("T.g", grammar, "TParser", "TLexer",				    "a", "a b", debug);		assertEquals("a b\n", found);	}	public void testOptional5() throws Exception {		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"tokens {BLOCK;}\n" +			"a : ID -> ID? ;\n"+ // match an ID to optional ID			"b : ID ;\n"+			"ID : 'a'..'z'+ ;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		String found = execParser("T.g", grammar, "TParser", "TLexer",				    "a", "a", debug);		assertEquals("a\n", found);	}	public void testArbitraryExprType() throws Exception {		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"tokens {BLOCK;}\n" +			"a : x+=b x+=b -> {new CommonTree()};\n"+			"b : ID ;\n"+			"ID : 'a'..'z'+ ;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		String found = execParser("T.g", grammar, "TParser", "TLexer",				    "a", "a b", debug);		//assertEquals("[not sure what this should be!]\n", found);//ATTENTION: I changed this one's behavior from the above.  Is it right?		assertEquals("nil\n", found);	}	public void testSet() throws Exception {		String grammar =			"grammar T;\n" +			"options { output = AST; } \n" +			"a: (INT|ID)+ -> INT+ ID+ ;\n" +			"INT: '0'..'9'+;\n" +			"ID : 'a'..'z'+;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		String found = execParser("T.g", grammar, "TParser", "TLexer",				    "a", "2 a 34 de", debug);		assertEquals("2 34 a de\n", found);	}	public void testRewriteAction() throws Exception {		String grammar =			"grammar T; \n" +			"options { output = AST; }\n" +			"tokens { FLOAT; }\n" +			"r\n" +			"    : INT -> {new CommonTree(new CommonToken(FLOAT,$INT.text+\".0\"))} \n" +			"    ; \n" +			"INT : '0'..'9'+; \n" +			"WS: (' ' | '\\n' | '\\t')+ {$channel = HIDDEN;}; \n";		String found = execParser("T.g", grammar, "TParser", "TLexer",				    "r", "25", debug);		assertEquals("25.0\n", found);	}	public void testOptionalSubruleWithoutRealElements() throws Exception {		// copy type *and* modifier even though it's optional		// for each invocation of (...)+ in rewrite		String grammar =			"grammar T;\n" +			"options {output=AST;} \n" +			"tokens {PARMS;} \n" +			"\n" +			"modulo \n" +			" : 'modulo' ID ('(' parms+ ')')? -> ^('modulo' ID ^(PARMS parms+)?) \n" +			" ; \n" +			"parms : '#'|ID; \n" +			"ID : ('a'..'z' | 'A'..'Z')+;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		String found = execParser("T.g", grammar, "TParser", "TLexer",				    "modulo", "modulo abc (x y #)", debug);		assertEquals("(modulo abc (PARMS x y #))\n", found);	}	// C A R D I N A L I T Y  I S S U E S	public void testCardinality() throws Exception {		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"tokens {BLOCK;}\n" +			"a : ID ID INT INT INT -> (ID INT)+;\n"+			"ID : 'a'..'z'+ ;\n" +			"INT : '0'..'9'+; \n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		execParser("T.g", grammar, "TParser", "TLexer",				    "a", "a b 3 4 5", debug);		String expecting =			"org.antlr.runtime.tree.RewriteCardinalityException: token ID";		String found = getFirstLineOfException();		assertEquals(expecting, found);	}	public void testCardinality2() throws Exception {		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"a : ID+ -> ID ID ID ;\n" + // only 2 input IDs			"op : '+'|'-' ;\n" +			"ID : 'a'..'z'+ ;\n" +			"INT : '0'..'9'+;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		execParser("T.g", grammar, "TParser", "TLexer",				   "a", "a b", debug);		String expecting =			"org.antlr.runtime.tree.RewriteCardinalityException: token ID";		String found = getFirstLineOfException();		assertEquals(expecting, found);	}	public void testCardinality3() throws Exception {		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"a : ID? INT -> ID INT ;\n" +			"op : '+'|'-' ;\n" +			"ID : 'a'..'z'+ ;\n" +			"INT : '0'..'9'+;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		execParser("T.g", grammar, "TParser", "TLexer",				   "a", "3", debug);		String expecting =			"org.antlr.runtime.tree.RewriteEmptyStreamException: token ID";		String found = getFirstLineOfException();		assertEquals(expecting, found);	}	public void testLoopCardinality() throws Exception {		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"a : ID? INT -> ID+ INT ;\n" +			"op : '+'|'-' ;\n" +			"ID : 'a'..'z'+ ;\n" +			"INT : '0'..'9'+;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		execParser("T.g", grammar, "TParser", "TLexer",				   "a", "3", debug);		String expecting =			"org.antlr.runtime.tree.RewriteEarlyExitException";		String found = getFirstLineOfException();		assertEquals(expecting, found);	}	// E R R O R S	public void testUnknownRule() throws Exception {		ErrorQueue equeue = new ErrorQueue();		ErrorManager.setErrorListener(equeue);		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"a : INT -> ugh ;\n" +			"ID : 'a'..'z'+ ;\n" +			"INT : '0'..'9'+;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		Grammar g = new Grammar(grammar);		Tool antlr = newTool();		antlr.setOutputDirectory(null); // write to /dev/null		CodeGenerator generator = new CodeGenerator(antlr, g, "Java");		g.setCodeGenerator(generator);		generator.genRecognizer();		int expectedMsgID = ErrorManager.MSG_UNDEFINED_RULE_REF;		Object expectedArg = "ugh";		Object expectedArg2 = null;		GrammarSemanticsMessage expectedMessage =			new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg, expectedArg2);		checkError(equeue, expectedMessage);	}	public void testKnownRuleButNotInLHS() throws Exception {		ErrorQueue equeue = new ErrorQueue();		ErrorManager.setErrorListener(equeue);		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"a : INT -> b ;\n" +			"b : 'b' ;\n" +			"ID : 'a'..'z'+ ;\n" +			"INT : '0'..'9'+;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		Grammar g = new Grammar(grammar);		Tool antlr = newTool();		antlr.setOutputDirectory(null); // write to /dev/null		CodeGenerator generator = new CodeGenerator(antlr, g, "Java");		g.setCodeGenerator(generator);		generator.genRecognizer();		int expectedMsgID = ErrorManager.MSG_REWRITE_ELEMENT_NOT_PRESENT_ON_LHS;		Object expectedArg = "b";		Object expectedArg2 = null;		GrammarSemanticsMessage expectedMessage =			new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg, expectedArg2);		checkError(equeue, expectedMessage);	}	public void testUnknownToken() throws Exception {		ErrorQueue equeue = new ErrorQueue();		ErrorManager.setErrorListener(equeue);		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"a : INT -> ICK ;\n" +			"ID : 'a'..'z'+ ;\n" +			"INT : '0'..'9'+;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		Grammar g = new Grammar(grammar);		Tool antlr = newTool();		antlr.setOutputDirectory(null); // write to /dev/null		CodeGenerator generator = new CodeGenerator(antlr, g, "Java");		g.setCodeGenerator(generator);		generator.genRecognizer();		int expectedMsgID = ErrorManager.MSG_UNDEFINED_TOKEN_REF_IN_REWRITE;		Object expectedArg = "ICK";		Object expectedArg2 = null;		GrammarSemanticsMessage expectedMessage =			new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg, expectedArg2);		checkError(equeue, expectedMessage);	}	public void testUnknownLabel() throws Exception {		ErrorQueue equeue = new ErrorQueue();		ErrorManager.setErrorListener(equeue);		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"a : INT -> $foo ;\n" +			"ID : 'a'..'z'+ ;\n" +			"INT : '0'..'9'+;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		Grammar g = new Grammar(grammar);		Tool antlr = newTool();		antlr.setOutputDirectory(null); // write to /dev/null		CodeGenerator generator = new CodeGenerator(antlr, g, "Java");		g.setCodeGenerator(generator);		generator.genRecognizer();		int expectedMsgID = ErrorManager.MSG_UNDEFINED_LABEL_REF_IN_REWRITE;		Object expectedArg = "foo";		Object expectedArg2 = null;		GrammarSemanticsMessage expectedMessage =			new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg, expectedArg2);		checkError(equeue, expectedMessage);	}	public void testUnknownCharLiteralToken() throws Exception {		ErrorQueue equeue = new ErrorQueue();		ErrorManager.setErrorListener(equeue);		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"a : INT -> 'a' ;\n" +			"ID : 'a'..'z'+ ;\n" +			"INT : '0'..'9'+;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		Grammar g = new Grammar(grammar);		Tool antlr = newTool();		antlr.setOutputDirectory(null); // write to /dev/null		CodeGenerator generator = new CodeGenerator(antlr, g, "Java");		g.setCodeGenerator(generator);		generator.genRecognizer();		int expectedMsgID = ErrorManager.MSG_UNDEFINED_TOKEN_REF_IN_REWRITE;		Object expectedArg = "'a'";		Object expectedArg2 = null;		GrammarSemanticsMessage expectedMessage =			new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg, expectedArg2);		checkError(equeue, expectedMessage);	}	public void testUnknownStringLiteralToken() throws Exception {		ErrorQueue equeue = new ErrorQueue();		ErrorManager.setErrorListener(equeue);		String grammar =			"grammar T;\n" +			"options {output=AST;}\n" +			"a : INT -> 'foo' ;\n" +			"ID : 'a'..'z'+ ;\n" +			"INT : '0'..'9'+;\n" +			"WS : (' '|'\\n') {$channel=HIDDEN;} ;\n";		Grammar g = new Grammar(grammar);		Tool antlr = newTool();		antlr.setOutputDirectory(null); // write to /dev/null		CodeGenerator generator = new CodeGenerator(antlr, g, "Java");		g.setCodeGenerator(generator);		generator.genRecognizer();		int expectedMsgID = ErrorManager.MSG_UNDEFINED_TOKEN_REF_IN_REWRITE;		Object expectedArg = "'foo'";		Object expectedArg2 = null;		GrammarSemanticsMessage expectedMessage =			new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg, expectedArg2);		checkError(equeue, expectedMessage);	}	// S U P P O R T	protected void checkError(ErrorQueue equeue,							  GrammarSemanticsMessage expectedMessage)		throws Exception	{		//System.out.println("errors="+equeue);		Message foundMsg = null;		for (int i = 0; i < equeue.errors.size(); i++) {			Message m = (Message)equeue.errors.get(i);			if (m.msgID==expectedMessage.msgID ) {				foundMsg = m;			}		}		assertTrue("no error; "+expectedMessage.msgID+" expected", equeue.errors.size()>0);		assertTrue("too many errors; "+equeue.errors, equeue.errors.size()<=1);		assertNotNull("couldn't find expected error: "+expectedMessage.msgID, foundMsg);		assertTrue("error is not a GrammarSemanticsMessage",				   foundMsg instanceof GrammarSemanticsMessage);		assertEquals(expectedMessage.arg, foundMsg.arg);		assertEquals(expectedMessage.arg2, foundMsg.arg2);		ErrorManager.resetErrorState(); // wack errors for next test	}}

⌨️ 快捷键说明

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