@ side-effects: rename: lexer -> parse