[Modern Compiler] Lexical Analysis

编译器的前端执行分析,后端进行合成。

词法分析器以字符流作为输入,生成一系列名字、关键字和标点符号,抛弃单词间空白符和注释。

目录

  • 目录
  • 词法单词 Lexical Tokens
  • 正则表达式
  • DFA NFA
    • 将正则表达式转换为NFA
    • 将NFA转换为DFA
  • Lex

词法单词 Lexical Tokens

保留字 reserved word,在多数语言中,不能作为标识符使用。

非单词例子:注释,预处理(include、#define NUMS 5, 6),宏(NUMS),空格符、tab、换行符

[Modern Compiler] Lexical Analysis_第1张图片

其中报告了每个单词的类型,和一些附加信息。


正则表达式

计算理论内容

[Modern Compiler] Lexical Analysis_第2张图片


DFA & NFA

计算理论内容

将正则表达式转换为NFA

将NFA转换为DFA


Lex

一个词法分析的自动生成器:将正则表达式转换为DFA。

/* 编写一个LEX输入文件,使之生成可计算文本文件的字符、单词和行数且能报告这些数字的程序。单词为不带标点或空格的字母和/数字的序列。标点和空白格不计算为单词。 */

%{ 
int characterCount = 0;
int lineCount = 0;
int wordCount = 0;
%}
character .
line [\n]
word [A-Za-z0-9]+
%%

{line} {lineCount++;}
{word} {wordCount++;characterCount+=yyleng;}
{character} {characterCount++;} 

%%

int main(){

    yylex();
    printf("Character Count: %d\n", characterCount);
    printf("Line Count: %d\n", lineCount);
    printf("Word Count: %d\n", wordCount);
    return 0;

}

你可能感兴趣的:(编译原理,compiler)