Skip to content

Cascara Language Processors Collection

The Cascara language processors collection is a set of modules that provide high performance and extensible language tools.

The collection is currently under development, with YAML being the most mature implementation.

YAML JSON XML
Tokenizer
AST Parser
Streaming Push Parser
Streaming Pull Parser
Emitter
Serializer
Converter

Cascara Language Processors and Cascara Common are available in the Maven Central repository.

For installation, see Getting Started.

Examples

The examples shown here are available in the cascara-docs-examples Github repository under examples/lang.

Tokenizers

javadoc

public class SimpleTokenize {
    public static void main(String args[]) {
        String text = "person: {\n" +
                      "  name: Dave\n" +
                      "  age: 31\n" +
                      "}";

        JsonTokenizer tokenizer = new JsonTokenizer();
        List<JsonToken> tokens = tokenizer.tokenize(text);
        for (JsonToken token : tokens) {
            System.out.println(token.getType() + " " + token.getLexeme());
        }
    }
}
public class SimpleTokenize {
    public static void main(String args[]) {
        InputStream is = SimpleTokenize.class.getResourceAsStream("subject.xml");
        XmlTokenizer tokenizer = new XmlTokenizer();
        List<XmlToken> tokens = tokenizer.tokenize(is);
        for (XmlToken token : tokens) {
            System.out.println(token.getType() + " " + token.getLexeme());
        }
    }
}
public class SimpleTokenize {
    public static void main(String args[]) {
        InputStream is = SimplePushParse.class.getResourceAsStream("subject.yaml");
        YamlTokenizer tokenizer = new YamlTokenizer();
        List<YamlToken> tokens = tokenizer.tokenize(is);
        for (YamlToken token : tokens) {
            System.out.println(token.getType() + " " + token.getLexeme());
        }
    }
}

Parsers

AST Parser

javadoc

public class SimpleAstParse {
    public static void main(String args[]) {
        SimpleAstParse example = new SimpleAstParse();
        example.parse("subject.yaml", "application/yaml");
        example.parse("subject.json", "application/json");
    }

    private void parse(String fileName, String contentType) {
        InputStream is = SimpleAstParse.class.getResourceAsStream(fileName);
        AstParser<?,?,?> parser = new ProcessorFactory().createAstParser(contentType);
        AstNode root = parser.parse(is);
        if (root instanceof MapAstNode map) {
            System.out.println(map.getString("name"));
            System.out.println(map.getString("age"));
        }
    }
}
public class SimpleAstParse {
    public static void main(String args[]) {
        InputStream is = SimpleAstParse.class.getResourceAsStream("subject.json");
        JsonAstParser parser = new JsonAstParser();
        JsonNode root = parser.parse(is);
        if (root instanceof JsonObject obj) {
            System.out.println(obj.getString("name"));
            System.out.println(obj.getString("age"));
        }
    }
}
public class SimpleAstParse {
    public static void main(String args[]) {
        InputStream is = SimpleAstParse.class.getResourceAsStream("subject.yaml");
        YamlAstParser parser = new YamlAstParser();
        YamlNode yaml = parser.parse(is);
        if (yaml instanceof YamlMap map) {
            System.out.println(map.getString("name"));
            System.out.println(map.getString("age"));
        }
    }
}

Streaming Pull Parser

javadoc

public class SimplePullParse {
    public static void main(String args[]) {
        InputStream is = SimplePullParse.class.getResourceAsStream("subject.yaml");
        try (YamlPullParser parser = new YamlPullParser(is)) {
            while (parser.hasNext()) {
                StreamingEvent event = parser.next();
                if (event.getType() == StreamingEventType.FIELD_NAME) {
                    String fieldName = event.getContent();
                    if ("name".equals(fieldName)) {
                        while (parser.hasNext()) {
                            StreamingEvent subEvent = parser.next();
                            if (subEvent.getType() == StreamingEventType.END_OBJECT) break;
                            if (subEvent.getType() == StreamingEventType.VALUE_SCALAR) {
                                System.out.println(subEvent.getContent());
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            System.err.println(e.getLocalizedMessage());
        }
    }
}

Streaming Push Parser

javadoc

public class SimplePushParse implements StreamHandler {
    public static void main(String args[]) {
        SimplePushParse handler = new SimplePushParse();
        InputStream is = SimplePushParse.class.getResourceAsStream("subject.yaml");
        YamlPushParser parser = new YamlPushParser();
            // .setReporter(new StandardReporter().setLevel(Level.TRACE));

        parser.parse(is, handler);
    }

    @Override
    public void onEvent(StreamingEvent event) {
        if (event != null) {
            switch(event.getType()) {
                case FIELD_NAME:
                    System.out.println("Name: " + event.getContent());
                    break;
                case VALUE_SCALAR:
                    System.out.println("Value: " + event.getContent());
                    break;
                default:
            }
        } else {
            System.err.println("NULL");
        }
    }
}

Serializers

javadoc

public class SimpleSerialize {
    public static void main(String args[]) {
        Person person = new Person("Dave", 31);
        JsonSerializer serializer = new JsonSerializer();
        String text = serializer.toText(person);
        System.out.println("Serialized JSON:\n" + text);
    }
}
public class SimpleSerialize {
    public static void main(String args[]) {
        Person person = new Person("Dave", 31);
        YamlSerializer serializer = new YamlSerializer();
        String yamlString = serializer.toText(person);
        System.out.println("Serialized YAML:\n" + yamlString);
    }
}

Emitters

Examples coming shortly

Converters

Examples coming shortly

Comparison with Jackson

Cascara Jackson
Type Descriptors & Type Serializers Third-party datatype modules
Cascara Annotations Jackson Core: Annotations
Cascara Serializers Jackson Core: Databind
PushParser & PullParser Streaming