免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4790 | 回复: 14
打印 上一主题 下一主题

建立小组:实现一个简单的programing language--2007/10/10更新(2楼) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-21 16:41 |只看该作者 |倒序浏览
首先声明,本人水平有限,各位高手请多指点,如果谁能组织的话就更好,如果没时间的话,就多给些意见和建议吧.我相信CU有很多这方面的高手,我只是希望大家一起来做点事.

我是一直对language很感兴趣,其实很多人都和我一样,只是有时候兴趣不能当生活,但不管怎样,做一件事不需要太多理由.

我的想法是先做一个简单的编译型language, 类C语言,哪怕丑陋点没关系,主要是能出一个完整的.最终目标现在还不敢说,否则就有点YY了 ,先做好这个练习版.

源代码-->中间代码-->机器代码(或虚拟机执行)

模块组成主要是生成中间代码和编译执行2部分,主要有几点零碎的想法:

1、倾向于编译成机器代码,前期可以使用虚拟机,可能简单一些;
2、编写的代码时将与平台无关,由编译器或虚拟机屏蔽OS的差异;
3、可以考虑做成GCC前端,但中间代码部分不能少,即在原中间代码基础上生成GCC中间代码;
4、没有指针;
5、支持的数据类型byte(1B), char(2B), short(2B), int(4B), long(8B), float(4B), double(8B),bool(false/true),string;
6、支持的关键字: break, continue, do, while, if, else, for, static, return, struct

大家抒发已见,或者有什么好的提意? 感兴趣的可以跟贴报名啊。



目前参加人员(1):
M.I.X

[ 本帖最后由 M.I.X 于 2007-10-11 10:16 编辑 ]

评分

参与人数 1可用积分 +3 收起 理由
prolj + 3

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2007-09-21 16:52 |只看该作者
2007/09/23 万里长征第一步 lex-yacc文件,附带工具和简单测试代码
1、下一步工作建立符号表(初步完成--2007/10/10)
     目前不支持struct和enum,只是完成初步的符号表存储
2、下一步进行语义的检测,需要进行二次扫描(2007/10/10--至--未定)

[ 本帖最后由 M.I.X 于 2007-10-10 20:42 编辑 ]

tool.rar

163 KB, 下载次数: 64

crla-2007-09-28.rar

44.57 KB, 下载次数: 50

crla-2007-10-10.rar

32.25 KB, 下载次数: 52

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
3 [报告]
发表于 2007-09-21 18:14 |只看该作者
原帖由 M.I.X 于 2007-9-21 16:41 发表
首先声明,本人水平有限,各位高手请多指点,如果谁能组织的话就更好,如果没时间的话,就多给些意见和建议吧.我相信CU有很多这方面的高手,我只是希望大家一起来做点事.

我是一直对language很感兴趣,其实很多人都 ...

你先做个雏形出来吧.

论坛徽章:
26
处女座
日期:2016-04-18 14:00:4515-16赛季CBA联赛之深圳
日期:2020-06-02 10:10:5015-16赛季CBA联赛之广夏
日期:2019-07-23 16:59:452016科比退役纪念章
日期:2019-06-26 16:59:1315-16赛季CBA联赛之天津
日期:2019-05-28 14:25:1915-16赛季CBA联赛之青岛
日期:2019-05-16 10:14:082016科比退役纪念章
日期:2019-01-11 14:44:062016科比退役纪念章
日期:2018-07-18 16:17:4015-16赛季CBA联赛之上海
日期:2017-08-22 18:18:5515-16赛季CBA联赛之江苏
日期:2017-08-04 17:00:4715-16赛季CBA联赛之佛山
日期:2017-02-20 18:21:1315-16赛季CBA联赛之天津
日期:2016-12-12 10:44:23
4 [报告]
发表于 2007-09-23 09:12 |只看该作者
经常有些小鬼叫着要做什么,但只是说说而已....

论坛徽章:
0
5 [报告]
发表于 2007-09-23 10:02 |只看该作者
原帖由 evaspring 于 2007-9-23 09:12 发表
经常有些小鬼叫着要做什么,但只是说说而已....

拍照留念

广告招租位

那就请M.I.X兄弟先做一个雏形出来吧,你要设计语言就要先定义语法,先把什么BNF范式写出来,再转化为代码就简单多了。
放心,你的问题组织上会很好解决的。

evaspring大师怎能见小鬼于水火之中而无动于衷呢?强烈建议evaspring大虾带领此项目。

论坛徽章:
0
6 [报告]
发表于 2007-09-23 10:09 |只看该作者
原帖由 M.I.X 于 2007-9-21 16:52 发表
先占个位子
以备后用

可以转让你这个位子吗?我给你一分。

有兴趣学习Compiler的话,看看mik的a64,看看lcc,看看gcc。大家可以交流交流。
至于做什么,还是先打好基础了再说。
再说,做就要做能被广泛使用的。清华计组老师相当牛,带着学生搞CPU,达到XXXXX水平了。可最后老师无奈的讲了一句话,咱这个项目唯一的好处就是锻炼了队伍。

论坛徽章:
0
7 [报告]
发表于 2007-09-23 11:27 |只看该作者
写一个实用的高级语言complier要有精力、时间和热忱。至于有没有能力这不重要,可以边搞边学。
如果有了这个心理准备,LZ 祝你好运

论坛徽章:
0
8 [报告]
发表于 2007-09-23 13:21 |只看该作者
原帖由 evaspring 于 2007-9-23 09:12 发表
经常有些小鬼叫着要做什么,但只是说说而已....



如果我告诉你我在大学里没有学过编译原理,
说这样的话就更可以理解了。

[ 本帖最后由 M.I.X 于 2007-9-27 22:10 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2007-09-26 17:14 |只看该作者
楼主加我一个吧,我也有这个梦想。

论坛徽章:
0
10 [报告]
发表于 2007-09-28 20:48 |只看该作者
上次附件有问题,已经重新更新了一下。
下面是初步确定使用的符号表的一些结构定义,代码目前还没有完成。


  1. typedef enum {StmtT, ExprT} NodeType;

  2. typedef enum {VariableT, ParameterT, ConstantT, AssignT, FunctionT, CallT, LabelT, IfT, ElseT, ForT, WhileT, DoWhileT, GotoT, ContinueT, BreakT, ReturnT} StmtType;

  3. typedef enum {OperT, ConstT, IdT,ValueT} ExprType;

  4. typedef enum {ByteT, CharT, ShortT, IntT, LongT, FloatT, DoubleT, BoolT, StringT, StructT, ClassT, VoidT} DataType;

  5. typedef enum
  6. {
  7.         OP_ASSIGN,
  8.         OP_EQ,
  9.         OP_NE,
  10.         OP_LT,
  11.         OP_GT,
  12.         OP_LE,
  13.         OP_GE,
  14.         OP_AND,
  15.         OP_OR,
  16.         OP_ADD,
  17.         OP_SUB,
  18.         OP_MUL,
  19.         OP_DIV,
  20.         OP_MOD,       
  21.         OP_ADD_ASSIGN,
  22.         OP_SUB_ASSIGN,
  23.         OP_MUL_ASSIGN,
  24.         OP_DIV_ASSIGN,
  25.         OP_MOD_ASSIGN,
  26.         OP_AND_ASSIGN,
  27.         OP_XOR_ASSIGN,
  28.         OP_OR_ASSIGN

  29. } OpType;

  30. struct Symbol
  31. {
  32.         char* name;
  33.         int lineno;
  34.         NodeType nodetype;
  35.         union
  36.         {
  37.                 StmtType stmt;
  38.                 ExprType expr;
  39.         } symtype;
  40.        
  41.         ValueType valuetype;
  42.         union
  43.         {
  44.                 OpType opval;
  45.                 char byteval;
  46.                 short charval;
  47.                 short shortval;
  48.                 int intval;
  49.                 int64 longval;
  50.                 float floatval;
  51.                 double doubleval;
  52.                 int boolval;
  53.                 char * stringval;
  54.                 void * structval;       
  55.         } value;
  56.        
  57.        
  58.         int    size;
  59.         int    bitsize;
  60.         int    boundary;
  61.         int    bitbdary;
  62.         DataType type;
  63.         DataType basetype;
  64.         DataType machtype;
  65.         int nelts : 0;

  66. };

  67. typedef struct Symrec Symrec ;
  68. struct Symrec
  69. {
  70.         Symbol node;
  71.         Symrec* child[MAX_CHILD];
  72.         Symrec* next;
  73. };


  74. struct Symtable
  75. {
  76.         Symtable * tables;
  77.         Symrec * symrec;
  78. };
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP