使用 flex/bison 构建类似 Lisp/Scheme 的解析树
我试图解析简单的 Lisp/scheme 代码
E.g. (func a (b c d) )
并从中构建一棵树, 我可以在 C 中进行解析而不使用 bison
(即,仅使用 flex
返回标记并通过递归构建树)。 但是,使用 bison
语法,我不确定在哪里添加代码 构建列表(即将哪个规则与累积终端关联 符号以及将构建列表链接到父节点的位置)。
我的语法与这里的类似: yacc 中的 Lisp 语法 语法正确,可以识别该代码。
I was trying to parse simple Lisp/scheme-like code
E.g. (func a (b c d) )
and build a tree from it,
I could do the parsing in C without using bison
(i.e, using onlyflex
to return tokens and building the tree with recursion).
But, with bison
grammar, I am not sure where to add the code to
build the list (i.e, which rule to associate with accumulating terminal
symbols and where to link a built list to parent node).
My grammar is similar to the one here:
Lisp grammar in yacc
the grammar is correct and can recognize the code.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您是否尝试过放置代码以将元素添加到每个原子中的当前列表,并放置代码以在处理括号时管理列表树?这似乎是最简单的方法,除非遇到其他问题:
这假设您在每个列表结构中保留一个父点。
Have you tried placing the code to add an element to the current list in each atom, and code to manage a tree of lists when you process the brackets? It seems the easiest way unless you run into other problems:
This assumes that you are keep a parent point in each list struct.