# test a simple predicate language expr: predicate | atom list: expr ("," expr)* predicate: NAME "(" [list] ")" [trailer] atom: NAME | NUMBER | STRING trailer: '(' [list] ')' | '[' list ']' | '.' NAME