/** * @param name the name of the current node * @param elem the name of the node until which we want to skip * @throws javax.xml.stream.XMLStreamException */ private void skipUntil(String name, String elem) throws XMLStreamException { skipBlanks(); name = reader.getLocalName(); if (name.equals(elem)) { return; } XMLPrint.printNEvent(reader, 3); throw new RuntimeException( "Error (" + reader.getLocation().getLineNumber() + ", " + reader.getLocation().getColumnNumber() + "): Parse error."); }
/** * Parse the <e> elements * * @throws javax.xml.stream.XMLStreamException */ private void procEntry() throws XMLStreamException { String attribute = attrib(COMPILER_RESTRICTION_ATTR); String ignore = attrib(COMPILER_IGNORE_ATTR); String name = ""; if (ignore.equals(COMPILER_IGNORE_YES_VAL) || (!(attribute.equals("")) && !(attribute.equals(direction)))) { while (!(name.equals(COMPILER_ENTRY_ELEM))) { reader.next(); if (reader.getEventType() == XMLStreamConstants.END_ELEMENT) { name = reader.getLocalName(); } } return; } ArrayList<EntryToken> elements = new ArrayList<EntryToken>(); while (true) { if (!reader.hasNext()) { throw new RuntimeException( "Error (" + reader.getLocation().getLineNumber() + "): Parse error."); } if (reader.getEventType() == XMLStreamConstants.START_ELEMENT) { name = reader.getLocalName(); } skipBlanks(); name = reader.getLocalName(); int type = reader.getEventType(); if (name.equals(COMPILER_PAIR_ELEM)) { elements.add(procTransduction()); } else if (name.equals(COMPILER_IDENTITY_ELEM)) { elements.add(procIdentity()); } else if (name.equals(COMPILER_FLAG_ELEM)) { elements.add(procFlag()); } else if (name.equals(COMPILER_REGEXP_ELEM)) { elements.add(procRegexp()); } else if (name.equals(COMPILER_PAR_ELEM)) { EntryToken par = procPar(); elements.add(par); // detection of the use of undefined paradigms String p = par.paradigmName; TransducerComp t = paradigms.get(p); if (t == null) { throw new RuntimeException("Error: Undefined paradigm '" + p + "'."); } // descartar entradas con paradigms vac�os (por las direciones, // normalmente if (t.isEmpty()) { while (!name.equals(COMPILER_ENTRY_ELEM) || type != XMLStreamConstants.END_ELEMENT) { reader.next(); if (reader.hasName()) { name = reader.getLocalName(); } type = reader.getEventType(); } return; } reader.next(); } else if (name.equals(COMPILER_ENTRY_ELEM) && type == XMLStreamConstants.END_ELEMENT) { // insertar elements into letter transducer insertEntryTokens(elements); reader.next(); return; } else if (reader.isWhiteSpace()) { } else if (allBlanks()) { if (!reader.hasText()) {} } else { throw new RuntimeException( "Error (" + reader.getLocation().getLineNumber() + "): Invalid inclusion of '<" + name + ">' into '<" + COMPILER_ENTRY_ELEM + ">'."); } } }