1 /* 2 * Copyright (C) 2006 uguu@users.sourceforge.jp, All Rights Reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * 3. Neither the name of Clarkware Consulting, Inc. nor the names of its 16 * contributors may be used to endorse or promote products derived 17 * from this software without prior written permission. For written 18 * permission, please contact clarkware@clarkware.com. 19 * 20 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 21 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 22 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 23 * CLARKWARE CONSULTING OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 24 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 26 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 29 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 package jp.sourceforge.tokenizer; 33 34 /** 35 * <p> 36 * 字句解析に失敗したことを表す例外です。 37 * </p> 38 * 39 * @author uguu@users.sourceforge.jp 40 */ 41 public final class TokenizerException extends RuntimeException { 42 43 private int line; 44 45 private int column; 46 47 /** 48 * <p> 49 * インスタンスを初期化します。複数のトークンが一致したことを表すメッセージを構築します。 50 * </p> 51 * 52 * @param line 53 * 例外が発生したときに読み込んでいた行番号。 54 * @param column 55 * 例外が発生したときに読み込まんでいた列番号。 56 * @param tokens 57 * 一致した複数のトークンの配列。 58 */ 59 public TokenizerException(int line, int column, TokenInfo[] tokens) { 60 super(TokenizerException.buildMessage(line, column, tokens)); 61 62 this.line = line; 63 this.column = column; 64 } 65 66 private static String buildMessage(int line, int column, TokenInfo[] tokens) { 67 String msg = line + "行目、" + column + "列目で複数のトークンに一致しました。一致したトークンの正規表現は次の通りです。{"; 68 for (int i = 0; i < tokens.length; i++) { 69 if (i != 0) { 70 msg += ", "; 71 } 72 msg += tokens[i].getTokenPattern().pattern(); 73 } 74 msg += "}"; 75 return msg; 76 } 77 78 /** 79 * <p> 80 * 例外が発生したときに読み込んでいた行番号を返します。 81 * </p> 82 * 83 * @return 例外が発生したときに読み込んでいた行番号。 84 */ 85 public int getLine() { 86 return this.line; 87 } 88 89 /** 90 * <p> 91 * 例外が発生したときに読み込んでいた列番号を返します。 92 * </p> 93 * 94 * @return 例外が発生したときに読み込んでいた列番号。 95 */ 96 public int getColumn() { 97 return this.column; 98 } 99 }