definegrammarsymbols.java

来自「SRI international 发布的OAA框架软件」· Java 代码 · 共 855 行 · 第 1/2 页

JAVA
855
字号
			return;
		}
	}
	public void endRule(String r)
	{
	}
	public void endSubRule()
	{
	}
	public void endTree()
	{
	}
	public void hasError()
	{
	}
	public void noASTSubRule()
	{
	}
	public void oneOrMoreSubRule()
	{
	}
	public void optionalSubRule()
	{
	}
    public void setUserExceptions(String thr) {}
	public void refAction(Token action)
	{
	}
	public void refArgAction(Token action)
	{
	}
	public void refCharLiteral(Token lit, Token label, boolean inverted, int autoGenType, boolean lastInRule)
	{
	}
	public void refCharRange(Token t1, Token t2, Token label, int autoGenType, boolean lastInRule)
	{
	}

	public void refElementOption(Token option, Token value) {
	}

	public void refTokensSpecElementOption(Token tok, Token option, Token value) {
	}

	public void refExceptionHandler(Token exTypeAndName, Token action) {
	}

	// Header action applies to all parsers and lexers.
	public void refHeaderAction(Token name,Token act)
	{
		headerActions.put((name==null) ? "" : Tool.stripFrontBack(name.getText(),"\"","\""),
								act);
		//		headerAction = act.getText();
	}

	public String getHeaderAction(String name)
	{
		Token t = (Token)headerActions.get(name);
		if ( t==null )
		{
			return "";
		}
		return t.getText();
	}

	public void refInitAction(Token action)
	{
	}
	public void refMemberAction(Token act)
	{
	}
	public void refPreambleAction(Token act)
	{
		thePreambleAction = act;
	}
	public void refReturnAction(Token returnAction)
	{
	}

	public void refRule(Token idAssign,
							  Token r,
							  Token label,
							  Token args,
							  int autoGenType)
	{
		String id = r.getText();
		//		if ( Character.isUpperCase(id.charAt(0)) ) { // lexer rule?
																			  if ( r.type == ANTLRTokenTypes.TOKEN_REF )
																			  {
																				  // lexer rule?
																				  id = CodeGenerator.lexerRuleName(id);
																			  }
		if ( !grammar.isDefined(id) )
		{
			grammar.define(new RuleSymbol(id));
		}
	}

	public void refSemPred(Token pred)
	{
	}

	public void refStringLiteral(Token lit,
										  Token label,
										  int autoGenType,
										  boolean lastInRule)
	{
		_refStringLiteral(lit, label, autoGenType, lastInRule);
	}

    /** Reference a token */
	public void refToken(Token assignId, Token t, Token label, Token args,
								boolean inverted, int autoGenType, boolean lastInRule)
	{
		_refToken(assignId, t, label, args, inverted, autoGenType, lastInRule);
	}

	public void refTokenRange(Token t1, Token t2, Token label, int autoGenType, boolean lastInRule)
	{
		// ensure that the DefineGrammarSymbols methods are called; otherwise a range addes more
		// token refs to the alternative by calling MakeGrammar.refToken etc...
		if ( t1.getText().charAt(0) == '"' )
		{
			refStringLiteral(t1, null, GrammarElement.AUTO_GEN_NONE, lastInRule);
		}
		else
		{
			_refToken(null, t1, null, null, false, GrammarElement.AUTO_GEN_NONE, lastInRule);
		}
		if ( t2.getText().charAt(0) == '"' )
		{
			_refStringLiteral(t2, null, GrammarElement.AUTO_GEN_NONE, lastInRule);
		}
		else
		{
			_refToken(null, t2, null, null, false, GrammarElement.AUTO_GEN_NONE, lastInRule);
		}
	}

	public void refTreeSpecifier(Token treeSpec) {
	}

	public void refWildcard(Token t, Token label, int autoGenType)
	{
	}

    /** Get ready to process a new grammar */
	public void reset()
	{
		grammar = null;
	}

	public void setArgOfRuleRef(Token argaction)
	{
	}

    /** Set the character vocabulary for a lexer */
	public void setCharVocabulary(BitSet b)
	{
		// grammar should enforce that this is only called for lexer
		((LexerGrammar)grammar).setCharVocabulary(b);
	}

    /** setFileOption: Associate an option value with a key.
	 * This applies to options for an entire grammar file.
	 * @param key The token containing the option name
	 * @param value The token containing the option value.
	 */
	public void setFileOption(Token key, Token value, String filename)
	{
		if (key.getText().equals("language"))
		{
			if (value.getType() == ANTLRParser.STRING_LITERAL)
			{
				language = Tool.stripBack(Tool.stripFront(value.getText(), '"'), '"');
			}
			else if (value.getType() == ANTLRParser.TOKEN_REF || value.getType() == ANTLRParser.RULE_REF)
			{
				language = value.getText();
			}
			else
			{
				tool.error("language option must be string or identifier", filename, value.getLine());
			}
		}
		else if (key.getText().equals("mangleLiteralPrefix"))
		{
			if (value.getType() == ANTLRParser.STRING_LITERAL)
			{
				tool.literalsPrefix = tool.stripFrontBack(value.getText(), "\"","\"");
			}
			else
			{
				tool.error("mangleLiteralPrefix option must be string", filename, value.getLine());
			}
		}
		else if (key.getText().equals("upperCaseMangledLiterals"))
		{
			if (value.getText().equals("true"))
			{
				tool.upperCaseMangledLiterals = true;
			}
			else if (value.getText().equals("false"))
			{
				tool.upperCaseMangledLiterals = false;
			}
			else
			{
				grammar.tool.error("Value for upperCaseMangledLiterals must be true or false", filename, key.getLine());
			}
		}
		else if (key.getText().equals("namespace") ||
					key.getText().equals("namespaceStd") ||
					key.getText().equals("namespaceAntlr") ||
					key.getText().equals("genHashLines") )
		{
			if (!language.equals("Cpp"))
			{
				tool.error(key.getText() + " option only valid for C++", filename, key.getLine());
			}
			else
			{
				if( key.getText().equals("genHashLines") )
				{
					if(!( value.getText().equals("true") || value.getText().equals("false") ))
						tool.error("genHashLines option must be true or false", filename, value.getLine());
					tool.genHashLines = value.getText().equals("true");
				}
				else
				{
					if ( value.getType() != ANTLRParser.STRING_LITERAL )
					{
						tool.error(key.getText()+" option must be a string", filename, value.getLine());
					}
					else
					{
						if ( key.getText().equals("namespace") )
							tool.setNameSpace(value.getText());
						else if( key.getText().equals("namespaceStd") )
							tool.namespaceStd = value.getText();
						else if( key.getText().equals("namespaceAntlr") )
							tool.namespaceAntlr = value.getText();
					}
				}
			}
		}
		else
		{
			tool.error("Invalid file-level option: " + key.getText(), filename, key.getLine());
		}
	}
    /** setGrammarOption: Associate an option value with a key.
	 * This function forwards to Grammar.setOption for some options.
	 * @param key The token containing the option name
	 * @param value The token containing the option value.
	 */
	public void setGrammarOption(Token key, Token value)
	{
		if (key.getText().equals("tokdef")||key.getText().equals("tokenVocabulary"))
		{
			tool.error("tokdef/tokenVocabulary options are invalid >= ANTLR 2.6.0.\n"+
						  "  Use importVocab/exportVocab instead.  Please see the documentation.\n"+
						  "  The previous options were so heinous that Terence changed the whole\n"+
						  "  vocabulary mechanism; it was better to change the names rather than\n"+
						  "  subtly change the functionality of the known options.  Sorry!", grammar.getFilename(), value.getLine());
		}
		else if (key.getText().equals("literal") &&
					grammar instanceof LexerGrammar )
		{
			tool.error("the literal option is invalid >= ANTLR 2.6.0.\n"+
						  "  Use the \"tokens {...}\" mechanism instead.",
						  grammar.getFilename(), value.getLine());
		}
		else if (key.getText().equals("exportVocab"))
		{
			// Set the token manager associated with the parser
			if (value.getType() == ANTLRParser.RULE_REF || value.getType() == ANTLRParser.TOKEN_REF)
			{
				grammar.exportVocab = value.getText();
			}
			else
			{
				tool.error("exportVocab must be an identifier", grammar.getFilename(), value.getLine());
			}
		}
		else if (key.getText().equals("importVocab"))
		{
			if (value.getType() == ANTLRParser.RULE_REF || value.getType() == ANTLRParser.TOKEN_REF)
			{
				grammar.importVocab = value.getText();
			}
			else
			{
				tool.error("importVocab must be an identifier", grammar.getFilename(), value.getLine());
			}
		}

		else
		{
			// Forward all unrecognized options to the grammar
			grammar.setOption(key.getText(), value);
		}
	}
	public void setRuleOption(Token key, Token value)
	{
	}
	public void setSubruleOption(Token key, Token value)
	{
	}
    /** Start a new lexer */
	public void startLexer(String file, Token name, String superClass, String doc)
	{
		if ( numLexers>0 )
		{
			tool.panic("You may only have one lexer per grammar file: class "+ name.getText());
		}
		numLexers++;
		reset();
		//System.out.println("Processing lexer '" + name.getText() + "'");
		// Does the lexer already exist?
		Grammar g = (Grammar)grammars.get(name);
		if (g != null)
		{
			if (!(g instanceof LexerGrammar))
			{
				tool.panic("'" + name.getText() + "' is already defined as a non-lexer");
			}
			else
			{
				tool.panic("Lexer '" + name.getText() + "' is already defined");
			}
		}
		else
		{
			// Create a new lexer grammar
			LexerGrammar lg = new LexerGrammar(name.getText(), tool, superClass);
			lg.comment = doc;
			lg.processArguments(args);
			lg.setFilename(file);
			grammars.put(lg.getClassName(), lg);
			// Use any preamble action
			lg.preambleAction = thePreambleAction;
			thePreambleAction = new CommonToken(Token.INVALID_TYPE, "");
			// This is now the current grammar
			grammar = lg;
		}
	}
    /** Start a new parser */
	public void startParser(String file, Token name, String superClass, String doc)
	{
		if ( numParsers>0 )
		{
			tool.panic("You may only have one parser per grammar file: class "+ name.getText());
		}
		numParsers++;
		reset();
		//System.out.println("Processing parser '" + name.getText() + "'");
		// Is this grammar already defined?
		Grammar g = (Grammar)grammars.get(name);
		if (g != null)
		{
			if (!(g instanceof ParserGrammar))
			{
				tool.panic("'" + name.getText() + "' is already defined as a non-parser");
			}
			else
			{
				tool.panic("Parser '" + name.getText() + "' is already defined");
			}
		}
		else
		{
			// Create a new grammar
			grammar = new ParserGrammar(name.getText(), tool, superClass);
			grammar.comment = doc;
			grammar.processArguments(args);
			grammar.setFilename(file);
			grammars.put(grammar.getClassName(), grammar);
			// Use any preamble action
			grammar.preambleAction = thePreambleAction;
			thePreambleAction = new CommonToken(Token.INVALID_TYPE, "");
		}
	}
    /** Start a new tree-walker */
	public void startTreeWalker(String file, Token name, String superClass, String doc)
	{
		if ( numTreeParsers>0 )
		{
			tool.panic("You may only have one tree parser per grammar file: class "+ name.getText());
		}
		numTreeParsers++;
		reset();
		//System.out.println("Processing tree-walker '" + name.getText() + "'");
		// Is this grammar already defined?
		Grammar g = (Grammar)grammars.get(name);
		if (g != null)
		{
			if (!(g instanceof TreeWalkerGrammar))
			{
				tool.panic("'" + name.getText() + "' is already defined as a non-tree-walker");
			}
			else
			{
				tool.panic("Tree-walker '" + name.getText() + "' is already defined");
			}
		}
		else
		{
			// Create a new grammar
			grammar = new TreeWalkerGrammar(name.getText(), tool, superClass);
			grammar.comment = doc;
			grammar.processArguments(args);
			grammar.setFilename(file);
			grammars.put(grammar.getClassName(), grammar);
			// Use any preamble action
			grammar.preambleAction = thePreambleAction;
			thePreambleAction = new CommonToken(Token.INVALID_TYPE, "");
		}
	}
	public void synPred()
	{
	}
	public void zeroOrMoreSubRule()
	{
	}
}

⌨️ 快捷键说明

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