Implement full grammer