美文网首页
代码的编译过程

代码的编译过程

作者: 和谐共处 | 来源:发表于2020-06-10 12:20 被阅读0次

    预处理

    gcc -E main.c -o main.i
    

    编译生成汇编代码

    gcc -S main.i -o main.s
    

    源码->汇编

    gcc -S main.c -o main.s
    

    汇编生成目标文件

    as main.s -o main.o 
    #或者
    gcc -c main.s -o main.o
    gcc -c main.c -o main.o
    

    链接各种库才能产生最终的正确可执行文件

    #ld命令需要指定所需的目标文件的的路径才能正确生成a.out的可执行文件
    ld -static main.o
    
    #这个会自动链接需要的库并生成a.aout可执行文件
    gcc main.o
    

    编译的过程

    假如有如下C代码:

    array[index] = (index + 4) * (2 + 6)
    

    扫描-词法分析-语法分析-源代码优化-代码生成-目标代码优化
    词法分析:
    词法分析器 lex
    这一阶段会将程序分割成一个一个的字符(串)符号忽略空格符,并对分割的字符进行标记分类
    关键字、标识符、字面量、特殊符号等

    以上代码词法分析的结果如下
    记号 类型
    array 标识符
    index 标识符
    ] 右方括号
    = 赋值
    ( 左圆括号
    index 标识符
    + 加号
    4 数字
    ) 右圆括号
    * 乘号
    ( 左圆括号
    2 数字
    + 加号
    6 数字
    ) 右圆括号

    语法分析
    语法分析器 yacc
    根据字符分析的结果,建立一个语法树,一个树结构,树的每一个节点都是一个简单的不能在分割表达式
    然后分析各个表达式是否符号规则,否则就报语法错误停止编译

    以上代码的语法树
    语法树

    相关文章

      网友评论

          本文标题:代码的编译过程

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