Skip to main content

module lang::yaml::Model

rascal-Not specified

AST model for YAML (loosely based on the serialization model of http://www.yaml.org/spec/1.2/spec.html)

Usage​

import lang::yaml::Model;

Dependencies​

import List;
import Map;
import Set;

data Node​

Generic representation for YAML nodes

data Node (int anchor=-1, type[value] \tag = #void) 
= sequence(list[Node] \list)
| scalar(value \value)
| reference()
| mapping(map[Node, Node] \map)
;

Tagging (using the \tag field) will be used to do typed serialization for ADTs in the future.

In valid YAML anchors always occur before any references this should also hold in our YAML data type. Dumping will throw index out of bound exception if references are out of order.

Anchors are only currently valid on seq/map nodes. and should be unique.

function loadYAML​

Node loadYAML(str src)

function dumpYAML​

str dumpYAML(Node yaml)

function checkYAML​

set[str] checkYAML(Node n)

function badAnchors​

set[Node] badAnchors(Node n)

function wronglyTypedScalars​

set[Node] wronglyTypedScalars(Node n)

function okValue​

bool okValue(type[&T <: value] _, value v)

function unsupportedTypes​

set[type[value]] unsupportedTypes(Node n)

function untaggedScalars​

set[Node] untaggedScalars(Node n)

function duplicateAnchors​

set[int] duplicateAnchors(Node n)

function undefinedRefs​

tuple[set[int], set[int]] undefinedRefs(reference(anchor=i), set[int] seen, set[int] dupl)

tuple[set[int], set[int]] undefinedRefs(s:sequence(ns), set[int] seen, set[int] dupl)

tuple[set[int], set[int]] undefinedRefs(nod:mapping(m), set[int] seen, set[int] dupl)

default tuple[set[int], set[int]] undefinedRefs(Node n, set[int] seen, set[int] dupl)

function equalNodes​

bool equalNodes(Node x, Node y)

Tests

test testLoadDump​

public test bool testLoadDump() {
Node n = loadYAML(TEST_YAML);
str y = dumpYAML(n);
return equalNodes(n, loadYAML(y));
}