当前位置: 首页 > 工具软件 > JAC > 使用案例 >

jac基础架构

曾沛
2023-12-01

  C标准注解

  首先解释几个很重要的术语:

  object:执行环境数据存储区(不只是DATA和BSS,也可能在 stack中)中的一块区域,当被引用的时候,object可能会被解释为相应的类型.

  expression:在以后的出现中所指的是 C语法中的expression,是一个泛指概念,可以是指一个identifier或者就是任何表达式(例如函数调用,加减...).

  lvalue:是一个代表object具有类型(object类型或者不完全类型,但是不能是void)的expression. 

  基础架构

  存储管理

  存储管理是一般系统里很常见的处理方式,及通过标准库中的malloc()分配一大块存储(这里分配得到的肯定只是虚拟存储,以后用一概用"存储"描述),然后建立相应的结构来管理,使用lazy mode,及jac使用之后释放的存储链入一个空闲链表freeblocks中,当jac内部分配存储的时候也是先查找freeblocks,否则才会调用malloc来分配.

  存储管理主要按生存期分为3个区:

  对应于整个translation-unit的UNIT,主要是符号表,及其类型表,

  对应于function的FUNC,存储局部符号,及其跳转label.

  及其对应于statement的STMT.

  由于代码比较简单,这里只给出接口函数,以便于以后的描述.

  

1 char *memalloc(unsigned m , unsigned a) 
2 //m表示申请的存储量,a表示申请的存储区.
3 void memdelete(unsigned a)
4 //a表示要释放的存储区.

  符号表

  符号表和后面将要介绍的类型表是整个jac里面最重要的结构,后端代码生成的时候也会引用相应的member.

  在这里要建立类型和符号的概念,例如struct s{int i}; ,s是一个tag,需要建立一个symbol entry,但是s同时又是一个类型.同时s也是一个identifiler,遵循identifiler的作用域覆盖规则,区分这些概念对理解jac的实现是非常重要的.

  

 1 //符号类型的定义,很重要.
2 struct symbol{
3 char *name;
4 Type type; //符号的类型
5 int sclass; //存储类别描述
6 float ref; //大概的引用次数
7 unio{
8 struct{
9 union value v;
10 }c;
11 ... ...
12 }u;
13 };
14 //符号表的定义.
15 struct table{
16 int level;
17 Table previous; //指向外层的符号表
18 struct entry{
19 struct symbol sym;
20 struct entry *link;
21 } *buckets[256]; //size
22 };

  to be continued..

  要把知道的写出来真的是一件很难很难的事情,这篇blog我会再修改,先睡觉了..

转载于:https://www.cnblogs.com/feqin/archive/2011/10/27/2225960.html

 类似资料: