Home

Awesome

README

Monster is a grammar based production tool. At present I am using this to generate json documents using production grammar.

Can be invoked via command-line like,

$ go run monster/monster.go -h
	  -bagdir="": directory path containing bags
	  -n=1: generate n combinations
	  -nonterm="": evaluate the non-terminal
	  -o="-": specify an output file
	  -seed=37: seed value

Example production grammar, that generate randomized json documents.

s 		   : value.
object     : "{" properties "}".
properties : properties "," property
		   | property.
property   : DQ (bag "./web2") DQ ":" value.
array      : "[" values "]".
values     : value "," value
		   | (weigh 0.8 0.2) values.
value      : (weigh 0.1) basic
		   | (weigh 0.45 0.1) array
		   | (weigh 0.45 0.1) object.
basic      : "true"
		   | "false"
		   | "null"
		   | number
		   | string.
string     : DQ (bag "./web2") DQ.
number     : (range 0 100000)
		   | (rangef 0.0 100.0).

The grammar can be invoked via command line like,

go run monster/monster.go -bagdir ./bags -n 10 ./prods/json.prod

use -n switch to generate as many document as needed, documents will be output to stdout by default, to redirect them to a file use -o switch.

different commands to debug monster,

// To generate GCTRACE.
GCDEBUG=gctrace=2 go run monster/monster.go -bagdir bags -count 1000000 -o o prods/users.prod

// To generate mem-profile.
go run monster/monster.go -bagdir bags -count 1000000 -memprof apr21.1.mprof -o o prods/users.prod

// To analyse alloc-space.
go tool pprof --svg --alloc_space monster/monster apr21.1.mprof > apr21.1.mprof.alloc.svg