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

📄 sqlscanner.java

📁 一个数据访问层Torque3.1的生成器的源代码
💻 JAVA
字号:
package org.apache.torque.engine.sql;/* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation.  All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, *    if any, must include the following acknowledgment: *       "This product includes software developed by the *        Apache Software Foundation (http://www.apache.org/)." *    Alternately, this acknowledgment may appear in the software itself, *    if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and *    "Apache Turbine" must not be used to endorse or promote products *    derived from this software without prior written permission. For *    written permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", *    "Apache Turbine", nor may "Apache" appear in their name, without *    prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation.  For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */import java.io.IOException;import java.io.Reader;import java.util.List;import java.util.ArrayList;/** * A simple Scanner implementation that scans an * sql file into usable tokens.  Used by SQLToAppData. * * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a> * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a> * @author <a href="mailto:andyhot@di.uoa.gr">Andreas Andreou</a> * @version $Id: SQLScanner.java,v 1.3 2003/08/08 16:54:53 mpoeschl Exp $ */public class SQLScanner{    /** white spaces */    private static final String WHITE = "\f\r\t\n ";    /** alphabetic characters */    private static final String ALFA            = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";    /** numbers */    private static final String NUMER = "0123456789";    /** alphanumeric */    private static final String ALFANUM = ALFA + NUMER;    /** special characters */    private static final String SPECIAL = ";(),'";    /** comment */    private static final char COMMENT_POUND = '#';    /** comment */    private static final char COMMENT_SLASH = '/';    /** comment */    private static final char COMMENT_STAR = '*';    /** comment */    private static final char COMMENT_DASH = '-';    /** the input reader */    private Reader in;    /** character */    private int chr;    /** token */    private String token;    /** list of tokens */    private List tokens;    /** line */    private int line;    /** column */    private int col;    /**     * Creates a new scanner with no Reader     */    public SQLScanner()    {        this(null);    }    /**     * Creates a new scanner with an Input Reader     *     * @param input the input reader     */    public SQLScanner(Reader input)    {        setInput(input);    }    /**     * Set the Input     *     * @param input the input reader     */    public void setInput(Reader input)    {        in = input;    }    /**     * Reads the next character and increments the line and column counters.     *     * @throws IOException If an I/O error occurs     */    private void readChar() throws IOException    {        boolean wasLine = (char) chr == '\r';        chr = in.read();        if ((char) chr == '\n' || (char) chr == '\r' || (char) chr == '\f')        {            col = 0;            if (!wasLine || (char) chr != '\n')            {                line++;            }        }        else        {            col++;        }    }    /**     * Scans an identifier.     *     * @throws IOException If an I/O error occurs     */    private void scanIdentifier () throws IOException    {        token = "";        char c = (char) chr;        while (chr != -1 && WHITE.indexOf(c) == -1 && SPECIAL.indexOf(c) == -1)        {            token = token + (char) chr;            readChar();            c = (char) chr;        }        int start = col - token.length();        tokens.add(new Token(token, line, start));    }    /**     * Scans an identifier which had started with the negative sign.     *     * @throws IOException If an I/O error occurs     */    private void scanNegativeIdentifier () throws IOException    {        token = "-";        char c = (char) chr;        while (chr != -1 && WHITE.indexOf(c) == -1 && SPECIAL.indexOf(c) == -1)        {            token = token + (char) chr;            readChar();            c = (char) chr;        }        int start = col - token.length();        tokens.add(new Token(token, line, start));    }    /**     * Scan the input Reader and returns a list of tokens.     *     * @return a list of tokens     * @throws IOException If an I/O error occurs     */    public List scan () throws IOException    {        line = 1;        col = 0;        boolean inComment = false;        boolean inCommentSlashStar = false;        boolean inCommentDash = false;        boolean inNegative;        tokens = new ArrayList();        readChar();        while (chr != -1)        {            char c = (char) chr;            inNegative = false;            if (c == COMMENT_DASH)            {                readChar();                if ((char) chr == COMMENT_DASH)                {                    inCommentDash = true;                }                else                {                    inNegative = true;                    c = (char) chr;                }            }            if (inCommentDash)            {                if (c == '\n' || c == '\r')                {                    inCommentDash = false;                }                readChar();            }            else if (c == COMMENT_POUND)            {                inComment = true;                readChar();            }            else if (c == COMMENT_SLASH)            {                readChar();                if ((char) chr == COMMENT_STAR)                {                    inCommentSlashStar = true;                }            }            else if (inComment || inCommentSlashStar)            {                if (c == '*')                {                    readChar();                    if ((char) chr == COMMENT_SLASH)                    {                        inCommentSlashStar = false;                    }                }                else if (c == '\n' || c == '\r')                {                    inComment = false;                }                readChar();            }            else if (ALFANUM.indexOf(c) >= 0)            {                if (inNegative)                {                    scanNegativeIdentifier();                }                else                {                    scanIdentifier();                }            }            else if (SPECIAL.indexOf(c) >= 0)            {                tokens.add(new Token("" + c, line, col));                readChar();            }            else            {                readChar();            }        }        return tokens;    }}

⌨️ 快捷键说明

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