
只想加入運算能力
|
131
詞彙分析
詞彙分析階段通常相當直覺易懂。它能以正規運算式完成(也因此可利用 NFA),因為
它涉及平面的字元序列和一些規則的簡單匹配,並決定這些字元看起來像不像關鍵字、
變數名稱、運算子,或是像其他別的東西。以下是將 SIMPLE 程式拆解成若干符記的
一些急就章的 Ruby 程式碼:
class LexicalAnalyzer < Struct.new(:string)
GRAMMAR = [
{ token: 'i', pattern: /if/ }, # if keyword
{ token: 'e', pattern: /else/ }, # else keyword
{ token: 'w', pattern: /while/ }, # while keyword
{ token: 'd', pattern: /do-nothing/ }, # do-nothing keyword
{ token: '(', pattern: /\(/ }, # opening bracket
{ token: ')', pattern: /\)/ }, # closing bracket
{ token: '{', pattern: /\{/ }, # opening curly bracket
{ token: '}', pattern: /\}/ }, # closing curly bracket
{ token: ';', pattern: ...