Lex
構文解析器(1.2)に解析を数字や英字や空白などの1文字単位で行わせると、複雜になりすぎる。しかし、人間が英文から英単語や数字などの記号列を、区切り文字(たとえば空白、タブ、改行、コンマ、終止符、カッコ)やその列を目印に抽出して、意味を判断しているのと、同様の発想ができる。すなわち、区切り記号列でソースを切っていくと、「print」のような語、「1999」のような10進数、「"Hello, world"」といった文字リテラル、「++」といった演算子、「}」や「;」など意味のある区切り文字など、各種の文字列が取り出せる。これをトークンという。ここまでの下位の文法処理を上記字句解析器(1.1)に行わせ、一方、構文解析器(1.2)はトークンから出発して句、文、ブロック、プログラムなどを認識する上位の文法処理に専念させる。この分業化により、それぞれの定義と処理を簡潔にできる。
この字句解析器(1.1)の合理的な開発を目的とし、機械可読にした規則定義を与えれば字句解析器を自動生成してくれる便利なツールがレキシカルアナライザジェネレータであり、LexやFlexなどがそれに属する。
同様に、構文解析器(1.2)の合理的な開発を目的とし、構文規則定義を与えれば構文解析器を自動生成してくれる便利なツールとして、Yacc(Yet Another Compiler Compiler)などのパーサジェネレータ(コンパイラコンパイラ)がある。