Supongamos que queremos poner una acción semántica intermedia en un programa PEG.js :
[~/srcPLgrado/pegjs/examples(master)]$ cat direct_intermedia.pegjs a = 'a'+ { console.log("acción intermedia"); } 'b'+ { console.log("acción final"); return "hello world!"; }Al compilar nos da un mensaje de error:
[~/srcPLgrado/pegjs/examples(master)]$ pegjs direct_intermedia.pegjs 1:48: Expected "/", ";", end of input or identifier but "'" found.
[~/srcPLgrado/pegjs/examples(master)]$ coffee semantic_intermedia.coffee acción intermedia. a = aa acción final. b = bb r = aabb [~/srcPLgrado/pegjs/examples(master)]$ cat semantic_intermedia.coffee PEG = require 'pegjs' grammar = """ a = a:$'a'+ & { console.log("acción intermedia. a = "+a); return true; } b:$'b'+ { console.log("acción final. b = "+b); return text(); } """ parser = PEG.buildParser grammar r = parser.parse "aabb" console.log("r = #{r}")Cuando se ejecuta produce esta salida:
[~/srcPLgrado/pegjs/examples(master)]$ coffee semantic_intermedia.coffee acción intermedia. a = aa acción final. b = bb r = aabb
[~/srcPLgrado/pegjs/examples(master)]$ cat intermedia.pegjs a = 'a'+ temp 'b'+ { console.log("acción final"); return "hello world!"; } temp = { console.log("acción intermedia"); }Este es el programa que usa el parser generado:
[~/srcPLgrado/pegjs/examples(master)]$ cat main_intermedia.js var parser = require("intermedia"); var input = process.argv[2] || 'aabb'; var result = parser.parse(input); console.log(result);al ejecutar tenemos:
[~/srcPLgrado/pegjs/examples(master)]$ pegjs intermedia.pegjs [~/srcPLgrado/pegjs/examples(master)]$ node main_intermedia.js acción intermedia acción final hello world!
Casiano Rodríguez León