-
Notifications
You must be signed in to change notification settings - Fork 0
richardxx/slisp
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
对此程序的简单说明: ---------------- 本程序为数据结构课广义表课后实验,实现了一个简单的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
No description, website, or topics provided.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published