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
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
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
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
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
Emitters
Examples coming shortly
Converters
Examples coming shortly