コード例 #1
0
public enum PascalTokenType implements TokenType {
  // Palavras reservadas
  AND,
  ARRAY,
  BEGIN,
  CASE,
  CONST,
  DIV,
  DO,
  DOWNTO,
  ELSE,
  END,
  FILE,
  FOR,
  FUNCTION,
  GOTO,
  IF,
  IN,
  LABEL,
  MOD,
  NIL,
  NOT,
  OF,
  OR,
  PACKED,
  PROCEDURE,
  PROGRAM,
  RECORD,
  REPEAT,
  SET,
  THEN,
  TO,
  TYPE,
  UNTIL,
  VAR,
  WHILE,
  WITH,

  // Símbolos especiais.
  PLUS("+"),
  MINUS("-"),
  STAR("*"),
  SLASH("/"),
  COLON_EQUALS(":="),
  DOT("."),
  COMMA(","),
  SEMICOLON(";"),
  COLON(":"),
  QUOTE("'"),
  EQUALS("="),
  NOT_EQUALS("<>"),
  LESS_THAN("<"),
  LESS_EQUALS("<="),
  GREATER_EQUALS(">="),
  GREATER_THAN(">"),
  LEFT_PAREN("("),
  RIGHT_PAREN(")"),
  LEFT_BRACKET("["),
  RIGHT_BRACKET("]"),
  LEFT_BRACE("{"),
  RIGHT_BRACE("}"),
  UP_ARROW("^"),
  DOT_DOT(".."),

  IDENTIFIER,
  INTEGER,
  REAL,
  STRING,
  ERROR,
  END_OF_FILE;

  private static final int FIRST_RESERVED_INDEX = AND.ordinal();
  private static final int LAST_RESERVED_INDEX = WITH.ordinal();

  private static final int FIRST_SPECIAL_INDEX = PLUS.ordinal();
  private static final int LAST_SPECIAL_INDEX = DOT_DOT.ordinal();

  // Set of lower-cased Pascal reserved word text strings.
  public static Set<String> RESERVED_WORDS = new HashSet<String>();

  static {
    final PascalTokenType values[] = PascalTokenType.values();
    for (int i = FIRST_RESERVED_INDEX; i <= LAST_RESERVED_INDEX; ++i) {
      RESERVED_WORDS.add(values[i].getText().toLowerCase());
    }
  }

  // Hash table of Pascal special symbols.  Each special symbol's text
  // is the key to its Pascal token type.
  public static Map<String, PascalTokenType> SPECIAL_SYMBOLS =
      new HashMap<String, PascalTokenType>();

  static {
    final PascalTokenType values[] = PascalTokenType.values();
    for (int i = FIRST_SPECIAL_INDEX; i <= LAST_SPECIAL_INDEX; ++i) {
      SPECIAL_SYMBOLS.put(values[i].getText(), values[i]);
    }
  }

  private String text; // token text

  /** Constructor. */
  PascalTokenType() {
    this.text = this.toString().toLowerCase();
  }

  PascalTokenType(final String text) {
    this.text = text;
  }

  public String getText() {
    return text;
  }
}
コード例 #2
0
  @Override
  public void startElement(
      final String namespaceURI, final String lName, final String qName, final Attributes attrs)
      throws SAXException {
    if (qName.equals("category")) {
      final String catName = attrs.getValue("name");
      final String priorityStr = attrs.getValue("priority");
      // int prio = 0;
      if (priorityStr != null) {
        category = new Category(catName, Integer.parseInt(priorityStr));
      } else {
        category = new Category(catName);
      }

      if ("off".equals(attrs.getValue(DEFAULT))) {
        category.setDefaultOff();
      }

    } else if (qName.equals("rules")) {
      final String languageStr = attrs.getValue("targetLang");
      language = Language.getLanguageForShortName(languageStr);
      if (language == null) {
        throw new SAXException("Unknown language '" + languageStr + "'");
      }
    } else if (qName.equals("rule")) {
      id = attrs.getValue("id");
      if (inRuleGroup) subId++;
      if (!(inRuleGroup && defaultOff)) {
        defaultOff = "off".equals(attrs.getValue(DEFAULT));
      }

      if (!(inRuleGroup && defaultOn)) {
        defaultOn = "on".equals(attrs.getValue(DEFAULT));
      }
      if (inRuleGroup && id == null) {
        id = ruleGroupId;
      }
      description = attrs.getValue("name");
      if (inRuleGroup && description == null) {
        description = ruleGroupDescription;
      }
      correctExamples = new ArrayList<StringPair>();
      incorrectExamples = new ArrayList<IncorrectBitextExample>();
      if (suggestionMatches != null) {
        suggestionMatches.clear();
      }
    } else if (PATTERN.equals(qName) || "target".equals(qName)) {
      startPattern(attrs);
    } else if (AND.equals(qName)) {
      inAndGroup = true;
    } else if (UNIFY.equals(qName)) {
      inUnification = true;
      uniNegation = YES.equals(attrs.getValue(NEGATE));
    } else if (qName.equals("feature")) {
      uFeature = attrs.getValue("id");
    } else if (qName.equals(TYPE)) {
      uType = attrs.getValue("id");
      uTypeList.add(uType);
    } else if (qName.equals(TOKEN)) {
      setToken(attrs);
    } else if (qName.equals(EXCEPTION)) {
      setExceptions(attrs);
    } else if (qName.equals(EXAMPLE) && attrs.getValue(TYPE).equals("correct")) {
      inCorrectExample = true;
      correctExample = new StringBuilder();
    } else if (EXAMPLE.equals(qName) && attrs.getValue(TYPE).equals("incorrect")) {
      inIncorrectExample = true;
      incorrectExample = new StringBuilder();
      exampleCorrection = new StringBuilder();
      if (attrs.getValue("correction") != null) {
        exampleCorrection.append(attrs.getValue("correction"));
      }
    } else if (MESSAGE.equals(qName)) {
      inMessage = true;
      message = new StringBuilder();
    } else if (qName.equals("short")) {
      inShortMessage = true;
      shortMessage = new StringBuilder();
    } else if (qName.equals(RULEGROUP)) {
      ruleGroupId = attrs.getValue("id");
      ruleGroupDescription = attrs.getValue("name");
      defaultOff = "off".equals(attrs.getValue(DEFAULT));
      defaultOn = "on".equals(attrs.getValue(DEFAULT));
      inRuleGroup = true;
      subId = 0;
    } else if (qName.equals("suggestion") && inMessage) {
      message.append("<suggestion>");
      inSuggestion = true;
    } else if (qName.equals("match")) {
      setMatchElement(attrs);
    } else if (qName.equals(MARKER) && inCorrectExample) {
      correctExample.append("<marker>");
    } else if (qName.equals(MARKER) && inIncorrectExample) {
      incorrectExample.append("<marker>");
    } else if (qName.equals("unification")) {
      uFeature = attrs.getValue("feature");
      inUnificationDef = true;
    } else if (qName.equals("equivalence")) {
      uType = attrs.getValue(TYPE);
    } else if (qName.equals("phrases")) {
      inPhrases = true;
    } else if (qName.equals("includephrases")) {
      phraseElementInit();
    } else if (qName.equals("phrase") && inPhrases) {
      phraseId = attrs.getValue("id");
    } else if (qName.equals("phraseref") && (attrs.getValue("idref") != null)) {
      preparePhrase(attrs);
    } else if (qName.equals("source")) {
      srcLang = Language.getLanguageForShortName(attrs.getValue("lang"));
    }
  }