private void composeFactor(StringBuilder bldr, Factor comp) { bldr.append(comp.getValue()); }
private Term parseTerm(Lexer lexer, boolean first) throws UcumException { Term res = new Term(); if (first && lexer.getType() == TokenType.NONE) { res.setComp(new Factor(1)); } else if (lexer.getType() == TokenType.SOLIDUS) { res.setOp(Operator.DIVISION); lexer.consume(); res.setTerm(parseTerm(lexer, false)); } else { if (lexer.getType() == TokenType.ANNOTATION) { res.setComp(new Factor(1)); // still lose the annotation lexer.consume(); } else res.setComp(parseComp(lexer)); if (lexer.getType() != TokenType.NONE && lexer.getType() != TokenType.CLOSE) { if (lexer.getType() == TokenType.SOLIDUS) { res.setOp(Operator.DIVISION); lexer.consume(); } else if (lexer.getType() == TokenType.PERIOD) { res.setOp(Operator.MULTIPLICATION); lexer.consume(); } else if (lexer.getType() == TokenType.ANNOTATION) res.setOp(Operator.MULTIPLICATION); // implicit else lexer.error("Expected '/' or '.'"); res.setTerm(parseTerm(lexer, false)); } } return res; }
private Component parseComp(Lexer lexer) throws UcumException { if (lexer.getType() == TokenType.NUMBER) { Factor fact = new Factor(lexer.getTokenAsInt()); lexer.consume(); return fact; } else if (lexer.getType() == TokenType.SYMBOL) return parseSymbol(lexer); else if (lexer.getType() == TokenType.NONE) lexer.error("unexpected end of expression looking for a symbol or a number"); else if (lexer.getType() == TokenType.OPEN) { lexer.consume(); Term res = parseTerm(lexer, true); if (lexer.getType() == TokenType.CLOSE) lexer.consume(); else lexer.error("Unexpected Token Type '"+lexer.getType().toString()+"' looking for a close bracket"); return res; } else lexer.error("unexpected token looking for a symbol or a number"); return null; // we never get to here }
private void composeFactor(StringBuilder bldr, Factor comp) { bldr.append(comp.getValue()); }
private Term parseTerm(Lexer lexer, boolean first) throws UcumException { Term res = new Term(); if (first && lexer.getType() == TokenType.NONE) { res.setComp(new Factor(1)); } else if (lexer.getType() == TokenType.SOLIDUS) { res.setOp(Operator.DIVISION); lexer.consume(); res.setTerm(parseTerm(lexer, false)); } else { if (lexer.getType() == TokenType.ANNOTATION) { res.setComp(new Factor(1)); // still lose the annotation lexer.consume(); } else res.setComp(parseComp(lexer)); if (lexer.getType() != TokenType.NONE && lexer.getType() != TokenType.CLOSE) { if (lexer.getType() == TokenType.SOLIDUS) { res.setOp(Operator.DIVISION); lexer.consume(); } else if (lexer.getType() == TokenType.PERIOD) { res.setOp(Operator.MULTIPLICATION); lexer.consume(); } else if (lexer.getType() == TokenType.ANNOTATION) res.setOp(Operator.MULTIPLICATION); // implicit else lexer.error("Expected '/' or '.'"); res.setTerm(parseTerm(lexer, false)); } } return res; }
private void composeFactor(StringBuilder bldr, Factor comp) { bldr.append(comp.getValue()); }
private Component parseComp(Lexer lexer) throws UcumException { if (lexer.getType() == TokenType.NUMBER) { Factor fact = new Factor(lexer.getTokenAsInt()); lexer.consume(); return fact; } else if (lexer.getType() == TokenType.SYMBOL) return parseSymbol(lexer); else if (lexer.getType() == TokenType.NONE) lexer.error("unexpected end of expression looking for a symbol or a number"); else if (lexer.getType() == TokenType.OPEN) { lexer.consume(); Term res = parseTerm(lexer, true); if (lexer.getType() == TokenType.CLOSE) lexer.consume(); else lexer.error("Unexpected Token Type '"+lexer.getType().toString()+"' looking for a close bracket"); return res; } else lexer.error("unexpected token looking for a symbol or a number"); return null; // we never get to here }
private void composeFactor(StringBuilder bldr, Factor comp) { bldr.append(comp.getValue()); }