lex and ast