private static String parseKey(Scanner scanner) { int token = scanner.scan(); Preconditions.checkArgument( token == Scanner.INT || token == Scanner.IDENT || token == Scanner.STRING, "invalid value: %s", scanner.input()); return scanner.tokenStr(); }
private void resolveSampleParamConfigs( InitCodeContext context, Map<String, SampleParameterConfig> configs) { for (Map.Entry<String, SampleParameterConfig> entry : configs.entrySet()) { Scanner scanner = new Scanner(entry.getKey()); InitCodeNode parent = FieldStructureParser.parsePath(this, scanner); int token = scanner.lastToken(); if (token == Scanner.EOF) { parent.resolveSampleParamConfig(context, entry.getValue()); } else if (token == '%') { Preconditions.checkArgument( scanner.scan() == Scanner.IDENT, "expected IDENT after '%': %s", entry.getKey()); String entityName = scanner.tokenStr(); Preconditions.checkArgument( scanner.scan() == Scanner.EOF, "expected EOF after entity name: %s", entityName); parent.resolveSampleParamConfig(context, entityName, entry.getValue()); } } }
/** * Parses the value of configs (i.e. the RHS of the '='). If the value is a double-quoted string * literal we return it unquoted. Otherwise we strip leading spaces and return the rest of value * as a string for backward compatibility. */ private static String parseValue(Scanner scanner) { int token = scanner.scan(); // Scanner.STRING means a double-quoted string literal if (token == Scanner.STRING) { String tokenStr = scanner.tokenStr(); if (scanner.scan() == Scanner.EOF) { return tokenStr; } } return scanner.tokenStr() + scanner.input().substring(scanner.pos()); } }
Scanner scanner = new Scanner(path); Preconditions.checkArgument( scanner.scan() == Scanner.IDENT, "expected identifier: %s", scanner.input()); int token; String entityName = null; while (true) { token = scanner.scan(); switch (token) { case '%': entityName == null, "expected only one \"%%\" in path: %s", path); Preconditions.checkArgument( scanner.scan() == Scanner.IDENT, "expected identifier after '%%': %s", scanner.input()); case '.': Preconditions.checkArgument( scanner.scan() == Scanner.IDENT, "expected identifier after '.': %s", scanner.input()); case '[': Preconditions.checkArgument( scanner.scan() == Scanner.INT, "expected number after '[': %s", scanner.input()); Preconditions.checkArgument( scanner.scan() == ']', "expected closing ']': %s", scanner.input()); break; case '{':
/** * Returns all the nodes to be rendered as sample function parameters. * * <p>If path is: * <li>a normal node, returns that node. * <li>a ReadFile node, returns the child node of that node. * <li>a resource path, returns the child node whose key equals the entity name in the path. */ private List<InitCodeNode> sampleFuncParams(InitCodeNode root, List<String> paths) { List<InitCodeNode> params = new ArrayList<>(); for (String path : paths) { Scanner scanner = new Scanner(path); InitCodeNode node = FieldStructureParser.parsePath(root, scanner); int token = scanner.lastToken(); if (token == '%') { scanner.scan(); params.add(node.getChildren().get(scanner.tokenStr())); } else if (node.getLineType() == InitCodeLineType.ReadFileInitLine) { params.add(node.getChildren().get(InitCodeNode.FILE_NAME_KEY)); } else { params.add(node); } } return params; }
scanner.scan() == Scanner.IDENT, "expected identifier: %s", scanner.input()); InitCodeNode parent = root.mergeChild(InitCodeNode.create(scanner.tokenStr())); int token; token = scanner.scan(); switch (token) { case '%': case '.': Preconditions.checkArgument( scanner.scan() == Scanner.IDENT, "expected identifier after '.': %s", scanner.input()); scanner.scan() == Scanner.INT, "expected number after '[': %s", scanner.input()); parent.setLineType(InitCodeLineType.ListInitLine); parent = parent.mergeChild(InitCodeNode.create(scanner.tokenStr())); scanner.scan() == ']', "expected closing ']': %s", scanner.input()); break; scanner.scan() == '}', "expected closing '}': %s", scanner.input()); break;
@Test public void testScanner() { Scanner scanner = new Scanner("$abc = def123 + 456 + \"xyz\";"); assertThat(scanner.scan()).isEqualTo(Scanner.IDENT); assertThat(scanner.tokenStr()).isEqualTo("$abc"); assertThat(scanner.scan()).isEqualTo('='); assertThat(scanner.scan()).isEqualTo(Scanner.IDENT); assertThat(scanner.tokenStr()).isEqualTo("def123"); assertThat(scanner.scan()).isEqualTo('+'); assertThat(scanner.scan()).isEqualTo(Scanner.INT); assertThat(scanner.tokenStr()).isEqualTo("456"); assertThat(scanner.scan()).isEqualTo('+'); assertThat(scanner.scan()).isEqualTo(Scanner.STRING); assertThat(scanner.tokenStr()).isEqualTo("xyz"); assertThat(scanner.scan()).isEqualTo(';'); assertThat(scanner.scan()).isEqualTo(Scanner.EOF); }
@Test public void testScannerInt() { { Scanner scanner = new Scanner("123 456"); assertThat(scanner.scan()).isEqualTo(Scanner.INT); assertThat(scanner.tokenStr()).isEqualTo("123"); assertThat(scanner.scan()).isEqualTo(Scanner.INT); assertThat(scanner.tokenStr()).isEqualTo("456"); assertThat(scanner.scan()).isEqualTo(Scanner.EOF); } // Leading zero not allowed. assertThrow(() -> new Scanner("0123").scan()); // Just zero is OK though. { Scanner scanner = new Scanner("0"); assertThat(scanner.scan()).isEqualTo(Scanner.INT); assertThat(scanner.tokenStr()).isEqualTo("0"); assertThat(scanner.scan()).isEqualTo(Scanner.EOF); } }
@Test public void testScannerDollar() { assertThrow(() -> new Scanner("$$abc").scan()); { Scanner scanner = new Scanner("$a$b$"); assertThat(scanner.scan()).isEqualTo(Scanner.IDENT); assertThat(scanner.tokenStr()).isEqualTo("$a"); assertThat(scanner.scan()).isEqualTo(Scanner.IDENT); assertThat(scanner.tokenStr()).isEqualTo("$b"); assertThrow(() -> scanner.scan()); } { Scanner scanner = new Scanner("a$$b"); assertThat(scanner.scan()).isEqualTo(Scanner.IDENT); assertThat(scanner.tokenStr()).isEqualTo("a"); assertThrow(() -> scanner.scan()); } { Scanner scanner = new Scanner("a$"); assertThat(scanner.scan()).isEqualTo(Scanner.IDENT); assertThat(scanner.tokenStr()).isEqualTo("a"); assertThrow(() -> scanner.scan()); } }
private OutputView.DefineView defineView( Scanner definition, MethodContext context, SampleValueSet valueSet, ScopeTable localVars) { Preconditions.checkArgument( definition.scan() == Scanner.IDENT, "%s:%s: expected identifier: %s", context.getMethodModel().getSimpleName(), valueSet.getId(), definition.input()); String identifier = definition.tokenStr(); assertIdentifierNotReserved( identifier, context.getMethodModel().getSimpleName(), valueSet.getId()); Preconditions.checkArgument( definition.scan() == '=', "%s:%s invalid definition, expecting '=': %s", context.getMethodModel().getSimpleName(), valueSet.getId(), definition.input()); OutputView.VariableView reference = accessorNewVariable(definition, context, valueSet, localVars, identifier, false); return OutputView.DefineView.newBuilder() .variableType(localVars.getTypeName(identifier)) .variableName(context.getNamer().localVarName(Name.from(identifier))) .reference(reference) .build(); }
config.scan() == Scanner.IDENT, "%s:%s: expected identifier: %s", context.getMethodModel().getSimpleName(), while ((token = config.scan()) != Scanner.EOF) { if (token == '.') { config.scan() == Scanner.IDENT, "%s:%s: expected identifier: %s", context.getMethodModel().getSimpleName(), config.input()); Preconditions.checkArgument( config.scan() == Scanner.INT, "%s:%s: expected int in index expression: %s", context.getMethodModel().getSimpleName(), config.scan() == ']', "%s:%s: expected ']': %s", context.getMethodModel().getSimpleName(),