📄 testsymboldefinitions.java
字号:
Object expectedArg = "X"; int expectedMsgID = ErrorManager.MSG_LEXER_RULES_NOT_ALLOWED; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg); checkError(equeue, expectedMessage); } public void testParserRuleInLexer() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "lexer grammar t;\n"+ "a : ;"); Object expectedArg = "a"; int expectedMsgID = ErrorManager.MSG_PARSER_RULES_NOT_ALLOWED; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg); checkError(equeue, expectedMessage); } public void testRuleScopeConflict() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "grammar t;\n"+ "scope a {\n" + " int n;\n" + "}\n" + "a : \n" + " ;\n"); Object expectedArg = "a"; int expectedMsgID = ErrorManager.MSG_SYMBOL_CONFLICTS_WITH_GLOBAL_SCOPE; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg); checkError(equeue, expectedMessage); } public void testTokenRuleScopeConflict() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "grammar t;\n"+ "scope ID {\n" + " int n;\n" + "}\n" + "ID : 'a'\n" + " ;\n"); Object expectedArg = "ID"; int expectedMsgID = ErrorManager.MSG_SYMBOL_CONFLICTS_WITH_GLOBAL_SCOPE; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg); checkError(equeue, expectedMessage); } public void testTokenScopeConflict() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "grammar t;\n"+ "tokens { ID; }\n"+ "scope ID {\n" + " int n;\n" + "}\n" + "a : \n" + " ;\n"); Object expectedArg = "ID"; int expectedMsgID = ErrorManager.MSG_SYMBOL_CONFLICTS_WITH_GLOBAL_SCOPE; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg); checkError(equeue, expectedMessage); } public void testTokenRuleScopeConflictInLexerGrammar() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "lexer grammar t;\n"+ "scope ID {\n" + " int n;\n" + "}\n" + "ID : 'a'\n" + " ;\n"); Object expectedArg = "ID"; int expectedMsgID = ErrorManager.MSG_SYMBOL_CONFLICTS_WITH_GLOBAL_SCOPE; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg); checkError(equeue, expectedMessage); } public void testTokenLabelScopeConflict() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "parser grammar t;\n"+ "scope s {\n" + " int n;\n" + "}\n" + "a : s=ID \n" + " ;\n"); Object expectedArg = "s"; int expectedMsgID = ErrorManager.MSG_SYMBOL_CONFLICTS_WITH_GLOBAL_SCOPE; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg); checkError(equeue, expectedMessage); } public void testRuleLabelScopeConflict() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "parser grammar t;\n"+ "scope s {\n" + " int n;\n" + "}\n" + "a : s=b \n" + " ;\n" + "b : ;\n"); Object expectedArg = "s"; int expectedMsgID = ErrorManager.MSG_SYMBOL_CONFLICTS_WITH_GLOBAL_SCOPE; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg); checkError(equeue, expectedMessage); } public void testLabelAndRuleNameConflict() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "parser grammar t;\n"+ "a : c=b \n" + " ;\n" + "b : ;\n" + "c : ;\n"); Object expectedArg = "c"; int expectedMsgID = ErrorManager.MSG_LABEL_CONFLICTS_WITH_RULE; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg); checkError(equeue, expectedMessage); } public void testLabelAndTokenNameConflict() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "parser grammar t;\n"+ "a : ID=b \n" + " ;\n" + "b : ID ;\n" + "c : ;\n"); Object expectedArg = "ID"; int expectedMsgID = ErrorManager.MSG_LABEL_CONFLICTS_WITH_TOKEN; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg); checkError(equeue, expectedMessage); } public void testLabelAndArgConflict() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "parser grammar t;\n"+ "a[int i] returns [int x]: i=ID \n" + " ;\n"); Object expectedArg = "i"; int expectedMsgID = ErrorManager.MSG_LABEL_CONFLICTS_WITH_RULE_ARG_RETVAL; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg); checkError(equeue, expectedMessage); } public void testLabelAndParameterConflict() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "parser grammar t;\n"+ "a[int i] returns [int x]: x=ID \n" + " ;\n"); Object expectedArg = "x"; int expectedMsgID = ErrorManager.MSG_LABEL_CONFLICTS_WITH_RULE_ARG_RETVAL; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg); checkError(equeue, expectedMessage); } public void testLabelRuleScopeConflict() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "parser grammar t;\n"+ "a\n" + "scope {" + " int n;" + "}\n" + " : n=ID\n" + " ;\n"); Object expectedArg = "n"; Object expectedArg2 = "a"; int expectedMsgID = ErrorManager.MSG_LABEL_CONFLICTS_WITH_RULE_SCOPE_ATTRIBUTE; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg, expectedArg2); checkError(equeue, expectedMessage); } public void testRuleScopeArgConflict() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "parser grammar t;\n"+ "a[int n]\n" + "scope {" + " int n;" + "}\n" + " : \n" + " ;\n"); Object expectedArg = "n"; Object expectedArg2 = "a"; int expectedMsgID = ErrorManager.MSG_ATTRIBUTE_CONFLICTS_WITH_RULE_ARG_RETVAL; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg, expectedArg2); checkError(equeue, expectedMessage); } public void testRuleScopeReturnValueConflict() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "parser grammar t;\n"+ "a returns [int n]\n" + "scope {" + " int n;" + "}\n" + " : \n" + " ;\n"); Object expectedArg = "n"; Object expectedArg2 = "a"; int expectedMsgID = ErrorManager.MSG_ATTRIBUTE_CONFLICTS_WITH_RULE_ARG_RETVAL; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg, expectedArg2); checkError(equeue, expectedMessage); } public void testRuleScopeRuleNameConflict() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "parser grammar t;\n"+ "a\n" + "scope {" + " int a;" + "}\n" + " : \n" + " ;\n"); Object expectedArg = "a"; Object expectedArg2 = null; int expectedMsgID = ErrorManager.MSG_ATTRIBUTE_CONFLICTS_WITH_RULE; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg, expectedArg2); checkError(equeue, expectedMessage); } public void testBadGrammarOption() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Tool antlr = newTool(); Grammar g = new Grammar(antlr, "t", new StringReader( "grammar t;\n"+ "options {foo=3; language=Java;}\n" + "a : 'a';\n")); Object expectedArg = "foo"; int expectedMsgID = ErrorManager.MSG_ILLEGAL_OPTION; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg); checkError(equeue, expectedMessage); } public void testBadRuleOption() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "grammar t;\n"+ "a\n"+ "options {k=3; tokenVocab=blort;}\n" + " : 'a';\n"); Object expectedArg = "tokenVocab"; int expectedMsgID = ErrorManager.MSG_ILLEGAL_OPTION; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg); checkError(equeue, expectedMessage); } public void testBadSubRuleOption() throws Exception { ErrorQueue equeue = new ErrorQueue(); ErrorManager.setErrorListener(equeue); // unique listener per thread Grammar g = new Grammar( "grammar t;\n"+ "a : ( options {k=3; language=Java;}\n" + " : 'a'\n" + " | 'b'\n" + " )\n" + " ;\n"); Object expectedArg = "language"; int expectedMsgID = ErrorManager.MSG_ILLEGAL_OPTION; GrammarSemanticsMessage expectedMessage = new GrammarSemanticsMessage(expectedMsgID, g, null, expectedArg); checkError(equeue, expectedMessage); } protected void checkError(ErrorQueue equeue, GrammarSemanticsMessage expectedMessage) throws Exception { /* System.out.println(equeue.infos); System.out.println(equeue.warnings); System.out.println(equeue.errors); assertTrue("number of errors mismatch", n, equeue.errors.size()); */ 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; } } assertNotNull("no error; "+expectedMessage.msgID+" expected", foundMsg); assertTrue("error is not a GrammarSemanticsMessage", foundMsg instanceof GrammarSemanticsMessage); assertEquals(expectedMessage.arg, foundMsg.arg); } protected void checkWarning(ErrorQueue equeue, GrammarSemanticsMessage expectedMessage) throws Exception { Message foundMsg = null; for (int i = 0; i < equeue.warnings.size(); i++) { Message m = (Message)equeue.warnings.get(i); if (m.msgID==expectedMessage.msgID ) { foundMsg = m; } } assertNotNull("no error; "+expectedMessage.msgID+" expected", foundMsg); assertTrue("error is not a GrammarSemanticsMessage", foundMsg instanceof GrammarSemanticsMessage); assertEquals(expectedMessage.arg, foundMsg.arg); } protected void checkPlusEqualsLabels(Grammar g, String ruleName, String tokenLabelsStr, String ruleLabelsStr) throws Exception { // make sure expected += labels are there Rule r = g.getRule(ruleName); StringTokenizer st = new StringTokenizer(tokenLabelsStr, ", "); Set tokenLabels = null; while ( st.hasMoreTokens() ) { if ( tokenLabels==null ) { tokenLabels = new HashSet(); } String labelName = st.nextToken(); tokenLabels.add(labelName); } Set ruleLabels = null; if ( ruleLabelsStr!=null ) { st = new StringTokenizer(ruleLabelsStr, ", "); ruleLabels = new HashSet(); while ( st.hasMoreTokens() ) { String labelName = st.nextToken(); ruleLabels.add(labelName); } } assertTrue("token += labels mismatch; "+tokenLabels+"!="+r.tokenListLabels, (tokenLabels!=null && r.tokenListLabels!=null) || (tokenLabels==null && r.tokenListLabels==null)); assertTrue("rule += labels mismatch; "+ruleLabels+"!="+r.ruleListLabels, (ruleLabels!=null && r.ruleListLabels!=null) || (ruleLabels==null && r.ruleListLabels==null)); if ( tokenLabels!=null ) { assertEquals(tokenLabels, r.tokenListLabels.keySet()); } if ( ruleLabels!=null ) { assertEquals(ruleLabels, r.ruleListLabels.keySet()); } } protected void checkSymbols(Grammar g, String rulesStr, String tokensStr) throws Exception { Set tokens = g.getTokenDisplayNames(); // make sure expected tokens are there StringTokenizer st = new StringTokenizer(tokensStr, ", "); while ( st.hasMoreTokens() ) { String tokenName = st.nextToken(); assertTrue("token "+tokenName+" expected", g.getTokenType(tokenName)!=Label.INVALID); tokens.remove(tokenName); } // make sure there are not any others (other than <EOF> etc...) for (Iterator iter = tokens.iterator(); iter.hasNext();) { String tokenName = (String) iter.next(); assertTrue("unexpected token name "+tokenName, g.getTokenType(tokenName)<Label.MIN_TOKEN_TYPE); } // make sure all expected rules are there st = new StringTokenizer(rulesStr, ", "); int n = 0; while ( st.hasMoreTokens() ) { String ruleName = st.nextToken(); assertNotNull("rule "+ruleName+" expected", g.getRule(ruleName)); n++; } Collection rules = g.getRules(); //System.out.println("rules="+rules); // make sure there are no extra rules assertEquals("number of rules mismatch; expecting "+n+"; found "+rules.size(), n, rules.size()); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -