美文网首页
编译原理-词法分析入门

编译原理-词法分析入门

作者: 平凡码农 | 来源:发表于2019-05-10 17:44 被阅读0次

想要理解一种语言的意思,首先要理解语言中的单词。词法分析就是将源程序拆解为一个个的单词,并确定单词的类型。

识别出单词后,将其转换成统一的机内表示(token)<种别码,属性值>。

一般的种别码的类型

单词类型 种别 种别码
关键字 if、else、return、continue、function 一词一码
标识符 变量名、数组名、函数名 多词一码
常量 整数、浮点数、字符型 一型一码
运算符 + 、-、*、/ 一词一码
一型一码
界限符 ;、(、)、{、} 一词一码

我们可以思考一个问题,大部分的编程语言是不是基本就是这些元素来构成的?回忆一下我们熟悉的C语言、Java等等。

一个最简单的C程序的源码

int main() {
        int a;
        int b = 10;
        a = b;
        return a;
}

通过使用clang的词法分析命令
clang -E -Xclang -dump-tokens main.c
可以输出clang对此源码的词法分析结果

int 'int'    [StartOfLine]  Loc=<main.c:3:1>
identifier 'main'    [LeadingSpace] Loc=<main.c:3:5>
l_paren '('     Loc=<main.c:3:9>
r_paren ')'     Loc=<main.c:3:10>
l_brace '{'  [LeadingSpace] Loc=<main.c:3:12>
int 'int'    [StartOfLine] [LeadingSpace]   Loc=<main.c:4:2>
identifier 'a'   [LeadingSpace] Loc=<main.c:4:6>
semi ';'        Loc=<main.c:4:7>
int 'int'    [StartOfLine] [LeadingSpace]   Loc=<main.c:5:2>
identifier 'b'   [LeadingSpace] Loc=<main.c:5:6>
equal '='    [LeadingSpace] Loc=<main.c:5:8>
numeric_constant '10'    [LeadingSpace] Loc=<main.c:5:10>
semi ';'        Loc=<main.c:5:12>
identifier 'a'   [StartOfLine] [LeadingSpace]   Loc=<main.c:6:2>
equal '='    [LeadingSpace] Loc=<main.c:6:4>
identifier 'b'   [LeadingSpace] Loc=<main.c:6:6>
semi ';'        Loc=<main.c:6:7>
return 'return'  [StartOfLine] [LeadingSpace]   Loc=<main.c:7:2>
identifier 'a'   [LeadingSpace] Loc=<main.c:7:9>
semi ';'        Loc=<main.c:7:10>
r_brace '}'  [StartOfLine]  Loc=<main.c:8:1>
eof ''      Loc=<main.c:8:2>

从结果可以清晰的看到,是把源程序拆成了一个个的token,并记录了其位置。

相关文章

  • 编译原理-词法分析入门

    想要理解一种语言的意思,首先要理解语言中的单词。词法分析就是将源程序拆解为一个个的单词,并确定单词的类型。 识别出...

  • 你不知道的JavaScript —— 作用域是什么

    1.1 编译原理 传统编译步骤 分词/词法分析(拆分成一个个词法单元)——>解析/语法分析(词法单元流转化为抽象语...

  • 编译原理->词法分析

    词法分析器的作用 词法分析器的主要任务是读入源程序的输入字符、将它们组成词素,生成并输出一个词法单元序列,每个词法...

  • 第一章作用域是什么

    1.1 编译原理 编译语言 分词/词法分析 解析/语法分析 代码生成 对于Javascript来说,大部分情况发生...

  • 什么是作用域

    编译原理 传统编译语言 词法分析:将由字符组成的字符串分解成(对编译语言来说)有意义的代码块,这些代码块被称为词法...

  • 作用域(一)

    编译原理 分词/词法分析这个过程称为分解代码块(词法单元),比如 var a = 2;。这个程序通常会被分解成为下...

  • 2018-09-07

    编译原理 Ch1 概念 编译程序 编译程序由八部分组成: 词法分析程序 语法分析程序 语义分析程序 中间代码生成程...

  • 编译原理大体概念

    编译原理学习 名词解释翻译器 translator编译器 compiler 高级语言--->低级语言词法分析 ...

  • 编译原理之词法分析

    词法分析的问题 术语 模式(pattern):产生和识别元素的规则 记号(token): 按照某个模式(或规则)识...

  • 编译原理:词法分析程序

网友评论

      本文标题:编译原理-词法分析入门

      本文链接:https://www.haomeiwen.com/subject/thxzoqtx.html