richardxx / slisp

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

对此程序的简单说明:
----------------
本程序为数据结构课广义表课后实验,实现了一个简单的lisp解释器,所以取名slisp。

由于程序代码比较多,不便于全文查看,所以我写了两个样本文件放在子目录demo下面,可以用下面的命令来查询输出:

	slisp demo/hello.lst

然后在屏幕上可以看到一些东西。

由于时间实在是匆忙,程序写了不久我还没有太多的调试便提交了,如果以后有时间再行改进工作。

本程序在RedHat 7.0,GCC 2.9.6环境下开发。


slisp语言的语法规范(Version 0.11):
-------------------------------
1. 此版本一共内建了8个内部命令,分为定义类和操作类。

	a. 定义类:
		def: 定义一个广义表
			eg: def A=(abcde,edcba);

		etn: 声明一个广义表,它的用法和语义都和C中的extern相同
			eg: etn A;

	b. 操作类:
		概述: 每一个要操作的表名后都可以接一个说明性的句子,它会在执行时输出到屏幕。
		
		prt: 打印一个广义表
			eg: prt A(My name is :  );

		(以下的格式都相同)

		had: 输出广义表的表头

		tal: 输出广义表的表尾

		dpt: 计算表的最大深度

		cnt: 统计表中有多少个单元素(非子表)

		inv: 导致广义表(递归的)
	
	c. 语言实现:
		使用#开头的语句表示注释,但与Unix shell一样,它只表示单行注释。
			eg: #This is a comment

		这个版本已经实现了递归定义表,可以这样实现:
			eg: def A=(haha,A);
			    prt A;
			屏幕上将会显示A的两层递归结果.

		语句于语句之间通过分号(;)分隔,否则会发生语法错误。
				
2. 命名约定:
	一个广义表只能由最多32个大写字母组成:
		eg: ABVD , GTYHFD , NNN
			
	一个单元素只能由最多32个小写字母组成:
		eg: abcde iloveyou
		
	源程序名必须以.lst为后缀才能执行。
		
3. 错误处理:(还未完全实现)
	如果你的程序没有按照规定书写,解释器将不会执行,同时会输出一个错误描述,然后继续向后解释执行。

4. 命令行参数:(未完全实现)
	目前只支持两个参数,输入slisp -help查看在线说明。


richardxx
2005年12月8日



About


Languages

Language:C 88.5%Language:C++ 9.1%Language:Makefile 1.9%Language:Shell 0.6%