yafa! Syntax [ (Circle) -> [square] -> (Circle) | (Circle) ] [ (circle) ] [ <lt1>(self loop) -> <lt1> ] EXPRESSION = EXPRESSION' ARROW NODE | EXPRESSION' ALTERNATION NODE | STRING EXPRESSION' = EXPRESSION' ARROW NODE | EXPRESSION' ALTERNATION NODE | NODE NODE = SQUARE | CIRCLE | ANCHOR SQUARE = "[" EXPRESSION "] | ANCHOR "[" EXPRESSION "] ANCHOR = "<" LABEL ">" ALTERNATION = "|" ARROW = SARROW | DARROW SARROW = "->" DARROW = "=>" LABEL = r"[\w\d]+" STRING = LABEL | """ ".*" """ Semantics