我试图解析简单的Lisp /方案代码
E.g. (func a (b c d) )

并从中构建一棵树,
我可以在C中进行解析,而不使用野牛(即仅使用)
灵活地返回令牌并用递归构建树).
但是,用野牛语法,我不知道在哪里添加代码
构建列表(即与累积终端关联的规则)
符号和链接建立的列表到父节点的位置).

我的语法类似于这里:
Lisp grammar in yacc
语法是正确的,可以识别代码.

解决方法

您是否尝试将代码添加到每个原子中的当前列表中的元素,以及在处理括号时管理列表树的代码?这似乎是最简单的方法,除非遇到其他问题:
listend: members ')'        { cur = cur->parent; }
       | ')'                { cur = cur->parent; }
       ;

list: '(' listend           { cur = newList(cur);}
    ;

atom: ID                    { appendAtom(cur,"ID"); }
    | NUM                   { appendAtom(cur,"NUM");}
    | STR                   { appendAtom(cur,"STR");}
    ;

这假设您在每个列表结构中保留一个父点.

解析 – 使用flex / bison构建Lisp / Scheme样分析树的更多相关文章

  1. windows – 为什么在lisp中计算到10亿这么慢?

    我不知道.这些结果很难相信.根据NorvigLisp比Python快3到85倍.从我得到的东西来看,最合乎逻辑的这种缓慢执行的解释是Windows中的Clisp和gcl有某种减慢大迭代的bug.怎么,你问,我不知道?那么,我的问题是,为什么这么慢?

  2. 如何防止Emacs调整窗口大小?

    我的Lisp工作环境将框架分为两个窗口,前者为主编码,后者为我的粘液评估.不幸的是,当我犯了一些错误,这个粘液调试器会警告我,并且这样做会显示在自动调整大小的底部窗口中.只是为了更明确:之前:后:如何防止Emacs调整窗口大小?我想让Emacs离开我的窗口大小一样.我该怎么做呢?阿尔弗雷多您可以使用命令M-xwindow-configuration-to-register开头记住您的窗口配置.您可以随时使用M-x跳转到寄存器恢复配置.

  3. emacs – 学习Windows / C程序员的常见Lisp技巧

    >如何从REPL中输入代码到实际拥有程序?>只要S表达式有效,我输入(defun…>我应该切换到学习Scheme吗?任何提示将非常感谢!I’mhopingthere’sabettermethodthanmycurrentselect+copy+paste.加载SLIME.在.lisp文件中输入代码,然后运行slime-eval-buffer将所有代码加载到Lisp中.然后,对于一个特定的函数,你正在攻击C-e,C-j在你运行的Lisp中重新定义它.-Howdoyoudebugerrors?是.–或其中的一

  4. Common Lisp的ubuntu16.04环境下安装

    CommonLisp的ubuntu环境下安装0x01.emacs安装ubuntu上已经自带0x02.lisp安装0x03.slime安装0x04.启动emacs里Alt+x输入slime,回车下面转载在emacs中使用lisp一个HelloWorld例子自从K&R以来,helloworld程序历来都是程序语言教程的第一个例子。下面就是这个语句:前面我没有说这个一个程序,这是因为,elisp不好作为可执行方式来运行,所有的elisp都是运行在emacs这个环境下。首先切换到scratch缓冲区里,如果当前模

  5. Emacs Lisp函数是`require`,因为`autoload`是`load`?

    我正在尝试编写GNUEmacs23来按需延迟发出require命令,而不是在我的.emacs文件中预先发出.如果我想延迟执行加载命令,我可以使用自动加载.但是需求和加载需要不同类型的参数.是否有预定义的功能,需要与autoload进行加载相同的工作?自动加载与require和load之间没有区别.require只是加载的前端,或多或少归结为:如您所见,给予require的符号名称等于加载的文件名.事实上,在Emacs会话中评估的第一个等同于.因此,您可以使用foo函数从库foo,您可以加载.

  6. Emacs Lisp 正则表达式规范

    表示匹配数量的区间的分界符也需要转义:\{3,4\},所以,{也不是特殊字符。括号也不是特殊字符,对于分组的括号要进行转义;=>t非捕获型括号的定义\(?唉,学了一个学一个。。

  7. Ubuntu下Common Lisp环境的安装

    1.安装emacssudoapt-getinstallemacs2.安装lisp环境选择了sbclsudoapt-getinstallsbclclispsbcl的具体执行程序位置是/usr/bin/sbcl..这个后面配置emacs时会用3.安装slimesudoapt-getinstallslimeslime的位置在/usr/share/common-lisp/source/slime..这个后

  8. 关于Lisp中正则序和应用序的问题,练习1.5,1.6,1.20

    关于正则序和应用序的问题,贯穿了全书,中间的习题和后面的惰性求值都会涉及到。书上已经给出了明确的定义:正则序是:完全展开后规约,应用序是:先求值而后应用。以练习1.5为例,使用正则序,会将这个过程展开为,因为满足if条件,于是直接返回0使用应用序,于是,你懂的,它自废武功死了,一般我们使用的解释器环境就是应用序,所以,这段程序运行就挂了。

  9. Windows Scheme / Lisp实现

    随着LISP和Scheme的成千上万的实现,我很难找到适合Windows开发的正确选择.我在学校学到了这些语言,发现他们非常优雅,但是我似乎无法找到一个适合于开发除学术环境以外的代码的实现.什么是具有以下要求的Scheme或LISP实现?

  10. Ubuntu 16.04 + ROS Kinetic 机器人操作系统学习镜像分享与使用安装说明

    Ubuntu16.04+ROSKinetic镜像分享与使用安装说明内容概要:1网盘文件介绍2镜像制作3系统使用与安装----祝ROS爱好者和开发者新年快乐:-)----镜像iso约1.7GB,更多功能在网盘中查找即可。pic图片目录,iso镜像目录,code学习ROS一些代码压缩包,build制作镜像文件,book书籍分享。在iso文件夹可以看到镜像文件ExbotBook_xxx.iso,由于之前发布镜像太大,目前这个镜像就是纯净版,只有Ubuntu16.04,ROSKinetic,Gazebo7.5,M

随机推荐

  1. arcgis api for flex之专题图制作饼状图,柱状图等

    总结以上是DEVMAX为你收集整理的arcgisapiforflex之专题图制作饼状图,柱状图等全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  2. arcgis for flex或silverlight全国地图天气预报的实现

    总结以上是DEVMAX为你收集整理的arcgisforflex或silverlight全国地图天气预报的实现全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  3. 天津政府应急系统之GIS一张图arcgis api for flex讲解十一路径导航模块

    总结以上是DEVMAX为你收集整理的天津政府应急系统之GIS一张图arcgisapiforflex讲解十一路径导航模块全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  4. arcgis for flex全国地图天气预报的具体实现过程解析

    总结以上是DEVMAX为你收集整理的arcgisforflex全国地图天气预报的具体实现过程解析全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  5. 天津政府应急系统之GIS一张图arcgis api for flex讲解四地图导航控件模块

    总结以上是DEVMAX为你收集整理的天津政府应急系统之GIS一张图arcgisapiforflex讲解四地图导航控件模块全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  6. BlazeDS

    总结以上是DEVMAX为你收集整理的BlazeDS全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  7. 【Flex】读取本地XML,然后XML数据转成JSON数据

    总结以上是DEVMAX为你收集整理的读取本地XML,然后XML数据转成JSON数据全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  8. 【Flex】读取本地JSON,然后JSON数据转成XML数据

    总结以上是DEVMAX为你收集整理的读取本地JSON,然后JSON数据转成XML数据全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  9. 【Flex】编辑器的缩放功能绝对定位和相对定位

    总结以上是DEVMAX为你收集整理的编辑器的缩放功能绝对定位和相对定位全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  10. 如何实现一个自己的嵌入式语言y

    总结以上是DEVMAX为你收集整理的如何实现一个自己的嵌入式语言y全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

返回
顶部