/** * Create an external name from the given name. * If the given name contains character which are not valid in an external name * the name is escaped with single quotes. * <p>The method simply delgates to {@link Tokenizer#createExternalName(String)}. * * @param name the name * @return a valid external name */ public static String createExternalName(final String name) { return Tokenizer.createExternalName(name); }
/** * Parses a function argument list <i>'(' arg1 ',' arg2 ',' arg3 ',' ... ')'</i> * * @return The generated term. * @throws ParseException if a parse error occurs */ private Term[] parseArgumentList() throws ParseException { final Term[] args = parseTermList(); final int tt = tokenizer.next(); if (tt != ')') { tokenizer.pushBack(); reportError("Missing ')' or ','."); /*I18N*/ } return args; }
/** * Appends all subsequential characters belonging to a hexadecimal number * constant to the current token and increments the current source position. */ private void eatHexNumber() { type = TT_HEX_INT; eat(); // '0' eat(); // 'x' or 'X' while (isHexDigit()) { eat(); } }
/** * Appends all subsequential characters belonging to a string constant * to the current token and increments the current source position. */ private void eatString() { type = TT_STRING; incPos(); // skip leading (") while (!isStringEnd()) { eat(); } if (!isEos()) { incPos(); // skip trailing (") } }
/** * Appends all subsequential characters belonging to a string constant * to the current token and increments the current source position. */ private void eatEscapedName() { type = TT_ESCAPED_NAME; incPos(); // skip leading (') while (!isEscapedNameEnd()) { if (isEscapedEscape()) { incPos(); } eat(); } if (!isEos()) { incPos(); // skip trailing (') } }
eatWhite(); if (isEos()) { type = TT_EOS; } else if (isNameStart()) { eatName(); } else if (isEscapedNameStart()) { eatEscapedName(); } else if (isStringStart()) { eatString(); } else if (isHexNumberStart()) { eatHexNumber(); } else if (isNumberStart()) { eatNumber(); } else { for (String specialToken : specialTokens) { int i = pos; for (; i < pos + n; i++) { if (isEos(i) || specialToken.charAt(i - pos) != peek(i)) { break; eat(n); break; if (ordinaryChar == peek()) { type = peek(); eat(); break;
@Test public void testPlusFour() { final Tokenizer tokenizer = new Tokenizer("+4"); assertEquals('+', tokenizer.next()); assertEquals('+', tokenizer.getType()); assertEquals("+", tokenizer.getToken()); assertEquals(Tokenizer.TT_INT, tokenizer.next()); assertEquals(Tokenizer.TT_INT, tokenizer.getType()); assertEquals("4", tokenizer.getToken()); assertEquals(Tokenizer.TT_EOS, tokenizer.next()); }
while (isDigit()) { eat(); // digit if (isDot()) { type = TT_DOUBLE; eat(); // '.' while (isDigit()) { eat(); // digit if (isExpPartStart()) { type = TT_DOUBLE; eat(); // 'e' or 'E' eat(); // '-' or '+' or digit while (isDigit()) { eat(); // digit type = TT_OCT_INT; for (int i = 0; i < token.length(); i++) { if (isOctDigit(token.charAt(i))) { type = TT_INT; break;
int tt = tokenizer.next(); if (tt == Tokenizer.TT_DOUBLE) { t1 = new Term.ConstD(convertDoubleToken()); t1 = new Term.ConstS(convertStringToken()); } else if (tt == Tokenizer.TT_KEYWORD) { String keyword = tokenizer.getToken(); if (keyword.equalsIgnoreCase("true")) { t1 = new Term.ConstB(true); String name = tokenizer.getToken(); t1 = parseCallOrRef(name); } else if (tt == '(') { t1 = parseTerm(true); tt = tokenizer.next(); if (tt != ')') { tokenizer.pushBack(); reportError("Missing ')'."); /*I18N*/ reportError("Term expected."); /*I18N*/ tokenizer.pushBack();
private String convertStringToken() { return tokenizer.getToken(); }
/** * Appends all subsequential characters belonging to a name to the current token * and increments the current source position. */ private void eatName() { type = TT_NAME; do { eat(); } while (isNamePart()); final String name = token.toString(); for (String keyword : keywords) { final boolean isEqual; if (caseSensitive) { isEqual = name.equals(keyword); } else { isEqual = name.equalsIgnoreCase(keyword); } if (isEqual) { type = TT_KEYWORD; break; } } }
/** * Implements the <code>parse</code> method. Calls <code>parseTerm(false)</code> * and throws an exception if the next token is not the end-of-string. * * @return The generated term. * @throws ParseException if a parse error occurs */ private Term parseImpl() throws ParseException { final Term expr = parseTerm(false); final int tt = tokenizer.next(); if (tt != Tokenizer.TT_EOS) { reportError("Incomplete expression."); /*I18N*/ } return expr; }
/** * Parses the expression given in the code string. * Names in the code string are resolved using the given namespace. * * @param code the code string, for the syntax of valid expressions refer * to the class description * @param namespace the environment which is used to resolve names * @throws ParseException if a parse error occurs */ public final Term parse(final String code, final Namespace namespace) throws ParseException { if (code == null) { throw new IllegalArgumentException("code is null"); } Namespace defaultNamespace = this.defaultNamespace; if (namespace != null && namespace != defaultNamespace) { this.defaultNamespace = new NamespaceImpl(namespace); } tokenizer = new Tokenizer(code); Term term = parseImpl(); tokenizer = null; this.defaultNamespace = defaultNamespace; return term; }
@Test public void testMinusFour() { final Tokenizer tokenizer = new Tokenizer("-4"); assertEquals('-', tokenizer.next()); assertEquals('-', tokenizer.getType()); assertEquals("-", tokenizer.getToken()); assertEquals(Tokenizer.TT_INT, tokenizer.next()); assertEquals(Tokenizer.TT_INT, tokenizer.getType()); assertEquals("4", tokenizer.getToken()); assertEquals(Tokenizer.TT_EOS, tokenizer.next()); }
private double convertDoubleToken() throws ParseException { final String token = tokenizer.getToken(); try { return Double.parseDouble(token); } catch (NumberFormatException e) { reportError("Token '" + token + "' is not a valid numeric constant."); /*I18N*/ } return 0.0; }
@Test public void testThreePlusFour() { final Tokenizer tokenizer = new Tokenizer("3+4"); assertEquals(Tokenizer.TT_INT, tokenizer.next()); assertEquals(Tokenizer.TT_INT, tokenizer.getType()); assertEquals("3", tokenizer.getToken()); assertEquals('+', tokenizer.next()); assertEquals('+', tokenizer.getType()); assertEquals("+", tokenizer.getToken()); assertEquals(Tokenizer.TT_INT, tokenizer.next()); assertEquals(Tokenizer.TT_INT, tokenizer.getType()); assertEquals("4", tokenizer.getToken()); assertEquals(Tokenizer.TT_EOS, tokenizer.next()); }
if (!existingBands.contains(selectedBand)) { final String name = selectedBand.getName(); final String expression = Tokenizer.createExternalName(name); addRow(variablesTable, new Object[]{name, expression}); } else {