170 likes | 509 Views
Lex & Yacc. COP 3402, Fall 2009. Lex – Symbol Table. When lexer has to recognize many tokens and their number is changing use a symbol table stores lexemes and info about them, such as type of token
E N D
Lex & Yacc COP 3402, Fall 2009
Lex – Symbol Table • When lexer has to recognize many tokens and their number is changing use a symbol table • stores lexemes and info about them, such as type of token • use a single pattern to match any word and then consult symbol table which token is found • Declaration start with type of token followed by the lexeme(s) • e.g:
Lex – Symbol Table (Cont’d) • Symbol table (ST) maintenance routines and variables: • func. add_word(): adds a new lexeme into ST • func. lookup_word(): looks up a word already in ST • var. state: keeps track of whether we are looking up words (state =LOOKUP) or declaring them (state = token type)
Yacc • For simple token recognition a lexer might be sufficient. • When specific sequences of tokens have to be recognized, a parser is necessary. • Grammar - a description of sequences of tokens and actions associated with them • e.g:
Yacc • Provides a general tool for imposing structure on the input to a computer program • Takes a grammar specified by the user and writes a parser that recognizes valid “sentences” in that grammar • When lex scanner and yacc parser are used together, the parser is the higher level routine • parser calls lexeryylex() whenever it needs a token • lexer scans through input recognizing tokens
Yacc • Lexer & parser have to decide on tokens codes