babel-bridge
Version:
a 'runtime' parsing expression grammar parser
38 lines (28 loc) • 1.05 kB
text/coffeescript
{log, a, w, m, upperCamelCase, lowerCamelCase} = Neptune.Art.StandardLib
{Parser, Nodes} = Neptune.BabelBridge
{Node} = Nodes
module.exports = suite: ->
MyParser = null
setup ->
class MyParser extends Parser
: class MyNode extends Node
compile: -> (a.compile() for a in when a.compile).join ''
root: "noun _ verb _ noun"
_: pattern: / +/, compile: -> " "
noun: w "bugs butterflies"
bugs: /bugs|ladybugs|beetles/i
butterflies: /butterflies|skippers|swallowtails/i
,
compile: -> upperCamelCase
verb:
pattern: /eat|shun/i
compile: -> lowerCamelCase
test "one rule multiple patters shares a nodeBaseClass", ->
mainNode = MyParser.parse "ladybugs eat beetles"
assert.eq mainNode.compile(), "Ladybugs eat Beetles"
test "case insensitive", ->
mainNode = MyParser.parse "ladybugs EAT beetles"
assert.eq mainNode.compile(), "Ladybugs eat Beetles"