#!/usr/bin/env groovy /* This example illustrates how to use from Groovy the Perl parser generated by Eyapp */ // require(url:'http://jyaml.sourceforge.net', jar:'jyaml-1.3.jar', version:'1.3') import org.ho.yaml.Yaml import java.lang.System def makeBashScript(String name, String bashscript) { bashscript = "#!/bin/bash\n"+bashscript new File(name).write(bashscript) "chmod a+x ./${name}".execute() } def compilegrammar() { script = "eyapp -b '' -B '' Calc.eyp" makeBashScript('compile', script) './compile'.execute().text } def buildast(String exp) { script = "./Calc.pm -y -i -c '$exp' 2>&1" makeBashScript('buildast', script) process = './buildast'.execute() process.waitFor() err = process.exitValue() if (err) { println "There were errors for input '$exp'!" System.exit(1) } tree = './buildast'.execute().text println "exitValue = $err\ntree = $tree" Yaml.load(tree) } def showtree(tree, input) { println "tree for input '$input'" println tree println "class: ${tree.getClass().name}" } compilegrammar(); tree = buildast("a = 2") //--- !!perl/hash:ASSIGN //children: // - !!perl/hash:VAR // attr: a // children: [] // token: VAR // - !!perl/hash:NUM // attr: 2 // children: [] // token: NUM assert(tree == [children:[[token:'VAR', children:[], attr:'a'], [token:'NUM', children:[], attr:2]]]) showtree(tree, "a = 2"); // Now let us try an erroneous input tree = buildast("a = *2") showtree(tree, "a = *2");