Path: blob/master/test/jdk/java/util/Calendar/CalendarTestScripts/Symbol.java
41152 views
/*1* Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/222324import java.util.HashMap;25import java.util.Locale;26import java.util.Map;2728import static java.util.Calendar.*;29import static java.util.GregorianCalendar.*;3031public class Symbol {3233private static Map<String, Symbol> symbols;3435String name;36Type type;37int value;38boolean isArithmetic;3940private Symbol(Type type, Integer value) {41this(type, value, false);42}4344private Symbol(Type type) {45this(type, null, false);46}4748private Symbol(Type type, boolean isArithmetic) {49this(type, null, isArithmetic);50}5152private Symbol(Type type, Integer value, boolean isArithmetic) {53this.name = type.toString().toLowerCase(Locale.ROOT);54this.type = type;55if (value != null)56this.value = value;57this.isArithmetic = isArithmetic;58}5960public int value() {61return value;62}6364public String toString() {65return type.name();66}6768public boolean isArithmetic() {69return isArithmetic;70}7172public static Symbol get(String s) {73return symbols.get(s);74}7576public static enum Type {77// Directives78TEST,79// Commands80LOCALE, TIMEZONE, NEW, USE, ASSIGN, EVAL,81CLEAR, SET, GET, ADD, ROLL, CHECK, PRINT, EXCEPTION,82IF,83// Operands84INSTANCE, GREGORIAN, ALL, MILLIS, DATE, DATETIME, TIMEOFDAY,85LENIENT, NONLENIENT,86MINIMUM, GREATESTMINIMUM, ACTUALMINIMUM,87MAXIMUM, LEASTMAXIMUM, ACTUALMAXIMUM,88FIRSTDAYOFWEEK, MINIMALDAYSINFIRSTWEEK,89// Arithmetic operators90PLUS, MINUS, MULTIPLY, DIVIDE, MOD,91// Relational operators92GT, GE, EQ, NEQ, LE, LT,93// Calendar field indices94FIELD,95// Day of week96DAYOFWEEK,97// Month98MONTH,99// AM/PM100AMPM,101// Era values102ERA;103}104105private static final void put(String key, Symbol sym) {106Symbol s = symbols.put(key, sym);107if (s != null) {108throw new RuntimeException("duplicated key: " + key);109}110}111112static {113symbols = new HashMap<String, Symbol>();114Symbol sym;115// Directives116put("test", new Symbol(Type.TEST));117118// Commands119put("locale", new Symbol(Type.LOCALE));120sym = new Symbol(Type.TIMEZONE);121put("tz", sym);122put("timezone", sym);123put("new", new Symbol(Type.NEW));124put("use", new Symbol(Type.USE));125put("assign", new Symbol(Type.ASSIGN));126put("eval", new Symbol(Type.EVAL));127put("clear", new Symbol(Type.CLEAR));128put("set", new Symbol(Type.SET));129put("get", new Symbol(Type.GET));130put("add", new Symbol(Type.ADD));131put("roll", new Symbol(Type.ROLL));132put("check", new Symbol(Type.CHECK));133put("print", new Symbol(Type.PRINT));134put("exception", new Symbol(Type.EXCEPTION));135put("throw", get("exception"));136put("if", new Symbol(Type.IF));137138// Operands139put("instance", new Symbol(Type.INSTANCE));140put("gregorian", new Symbol(Type.GREGORIAN));141put("all", new Symbol(Type.ALL));142put("millis", new Symbol(Type.MILLIS));143put("date", new Symbol(Type.DATE));144put("datetime", new Symbol(Type.DATETIME));145put("timeofday", new Symbol(Type.TIMEOFDAY));146put("lenient", new Symbol(Type.LENIENT));147sym = new Symbol(Type.NONLENIENT);148put("non-lenient", sym);149put("nonlenient", sym);150put("firstdayofweek", new Symbol(Type.FIRSTDAYOFWEEK));151put("minimaldaysinfirstweek", new Symbol(Type.MINIMALDAYSINFIRSTWEEK));152153sym = new Symbol(Type.MINIMUM);154put("minimum", sym);155put("min", sym);156sym = new Symbol(Type.GREATESTMINIMUM);157put("greatestminimum", sym);158put("greatestmin", sym);159sym = new Symbol(Type.ACTUALMINIMUM);160put("actualminimum", sym);161put("actualmin", sym);162sym = new Symbol(Type.MAXIMUM);163put("maximum", sym);164put("max", sym);165sym = new Symbol(Type.LEASTMAXIMUM);166put("leastmaximum", sym);167put("leastmax", sym);168sym = new Symbol(Type.ACTUALMAXIMUM);169put("actualmaximum", sym);170put("actualmax", sym);171172// Arithmetic operators173put("+", new Symbol(Type.PLUS, true));174put("-", new Symbol(Type.MINUS, true));175put("*", new Symbol(Type.MULTIPLY, true));176put("/", new Symbol(Type.DIVIDE, true));177put("%", new Symbol(Type.MOD, true));178179// Relational operators180put(">", new Symbol(Type.GT, false));181put(">=", new Symbol(Type.GE, false));182put("==", new Symbol(Type.EQ, false));183put("!=", new Symbol(Type.NEQ, false));184put("<=", new Symbol(Type.LE, false));185put("<", new Symbol(Type.LT, false));186187// Calendar Fields188put("era", new Symbol(Type.FIELD, ERA));189put("year", new Symbol(Type.FIELD, YEAR));190put("month", new Symbol(Type.FIELD, MONTH));191sym = new Symbol(Type.FIELD, WEEK_OF_YEAR);192put("week_of_year", sym);193put("weekofyear", sym);194put("woy", sym);195sym = new Symbol(Type.FIELD, WEEK_OF_MONTH);196put("week_of_month", sym);197put("weekofmonth", sym);198put("wom", sym);199sym = new Symbol(Type.FIELD, DAY_OF_MONTH);200put("day_of_month", sym);201put("dayofmonth", sym);202put("dom", sym);203sym = new Symbol(Type.FIELD, DAY_OF_YEAR);204put("day_of_year", sym);205put("dayofyear", sym);206put("doy", sym);207208sym = new Symbol(Type.FIELD, DAY_OF_WEEK);209put("day_of_week", sym);210put("dayofweek", sym);211put("dow", sym);212sym = new Symbol(Type.FIELD, DAY_OF_WEEK_IN_MONTH);213put("day_of_week_in_month", sym);214put("dayofweekinmonth", sym);215put("dowim", sym);216sym = new Symbol(Type.FIELD, AM_PM);217put("am_pm", sym);218put("ampm", sym);219put("hour", new Symbol(Type.FIELD, HOUR));220sym = new Symbol(Type.FIELD, HOUR_OF_DAY);221put("hour_of_day", sym);222put("hourofday", sym);223put("hod", sym);224put("minute", new Symbol(Type.FIELD, MINUTE));225put("second", new Symbol(Type.FIELD, SECOND));226put("millisecond", new Symbol(Type.FIELD, MILLISECOND));227sym = new Symbol(Type.FIELD, ZONE_OFFSET);228put("zone_offset", sym);229put("zoneoffset", sym);230put("zo", sym);231sym = new Symbol(Type.FIELD, DST_OFFSET);232put("dst_offset", sym);233put("dstoffset", sym);234put("do", sym);235236// Day of week237sym = new Symbol(Type.DAYOFWEEK, SUNDAY);238put("sunday", sym);239put("sun", sym);240sym = new Symbol(Type.DAYOFWEEK, MONDAY);241put("monday", sym);242put("mon", sym);243sym = new Symbol(Type.DAYOFWEEK, TUESDAY);244put("tuesday", sym);245put("tue", sym);246sym = new Symbol(Type.DAYOFWEEK, WEDNESDAY);247put("wednesday", sym);248put("wed", sym);249sym = new Symbol(Type.DAYOFWEEK, THURSDAY);250put("thursday", sym);251put("thu", sym);252sym = new Symbol(Type.DAYOFWEEK, FRIDAY);253put("friday", sym);254put("fri", sym);255sym = new Symbol(Type.DAYOFWEEK, SATURDAY);256put("saturday", sym);257put("sat", sym);258259260// Month261sym = new Symbol(Type.MONTH, JANUARY);262put("january", sym);263put("jan", sym);264sym = new Symbol(Type.MONTH, FEBRUARY);265put("february", sym);266put("feb", sym);267sym = new Symbol(Type.MONTH, MARCH);268put("march", sym);269put("mar", sym);270sym = new Symbol(Type.MONTH, APRIL);271put("april", sym);272put("apr", sym);273sym = new Symbol(Type.MONTH, MAY);274put("may", sym);275sym = new Symbol(Type.MONTH, JUNE);276put("june", sym);277put("jun", sym);278sym = new Symbol(Type.MONTH, JULY);279put("july", sym);280put("jul", sym);281sym = new Symbol(Type.MONTH, AUGUST);282put("august", sym);283put("aug", sym);284sym = new Symbol(Type.MONTH, SEPTEMBER);285put("september", sym);286put("sep", sym);287sym = new Symbol(Type.MONTH, OCTOBER);288put("octobwe", sym);289put("oct", sym);290sym = new Symbol(Type.MONTH, NOVEMBER);291put("november", sym);292put("nov", sym);293sym = new Symbol(Type.MONTH, DECEMBER);294put("december", sym);295put("dec", sym);296sym = new Symbol(Type.MONTH, UNDECIMBER);297put("undecimber", sym);298299// AM/PM300put("am", new Symbol(Type.AMPM, AM));301put("pm", new Symbol(Type.AMPM, PM));302303// Eras304305// Julian eras306sym = new Symbol(Type.ERA, BC);307put("bc", sym);308put("bce", sym);309sym = new Symbol(Type.ERA, AD);310put("ad", sym);311put("ce", sym);312313// Buddhist era314put("be", new Symbol(Type.ERA, 1));315316// Japanese imperial eras317sym = new Symbol(Type.ERA, 0);318put("before_meiji", sym);319put("beforemeiji", sym);320put("meiji", new Symbol(Type.ERA, 1));321put("taisho", new Symbol(Type.ERA, 2));322put("showa", new Symbol(Type.ERA, 3));323put("heisei", new Symbol(Type.ERA, 4));324put("reiwa", new Symbol(Type.ERA, 5));325326}327}328329330