grammar should throw when an edge name is empty
grammar should throw when a horizontal edge does not have a name
simplify grammar description in #if 0 block