相关疑难解决方法(0)

学习编写一个编译器

首选语言:C/C++,Java和Ruby.

我正在寻找一些有用的书籍/教程,如何编写自己的编译器只是为了教育目的.我最熟悉C/C++,Java和Ruby,所以我更喜欢涉及这三者之一的资源,但任何好的资源都是可以接受的.

language-agnostic compiler-construction

699
推荐指数
29
解决办法
29万
查看次数

方程(表达式)解析器具有优先权?

我使用简单的堆栈算法开发了一个方程解析器,它将处理二进制(+, - ,|,&,*,/等)运算符,一元(!)运算符和括号.

但是,使用这种方法会让我拥有相同优先级的所有内容 - 无论操作符如何,都会从左到右进行评估,尽管可以使用括号强制执行优先级.

所以现在"1 + 11*5"会返回60,而不是人们所期望的56.

虽然这适用于当前项目,但我希望有一个通用例程,我可以用于以后的项目.

编辑清晰:

解析具有优先级的方程的好算法是什么?

我对一些简单的实现感兴趣,并且理解我可以自己编写代码来避免使用可用代码的许可问题.

语法:

我不明白语法问题 - 我是手写的.这很简单,我认为不需要YACC或Bison.我只需要用诸如"2 + 3*(42/13)"之类的方程计算字符串.

语言:

我在C中这样做,但我对算法感兴趣,而不是语言特定的解决方案.C足够低,如果需要,很容易转换成另一种语言.

代码示例

我发布了上面讨论的简单表达式解析器测试代码.项目要求发生了变化,因此我从不需要优化性能或空间代码,因为它没有包含在项目中.它是原始的详细形式,应该易于理解.如果我在运算符优先级方面做了更多的事情,我可能会选择宏hack,因为它简单地匹配程序的其余部分.但是,如果我在一个真实的项目中使用它,我将寻求一个更紧凑/更快速的解析器.

相关问题

数学解析器的智能设计?

-亚当

algorithm parsing equation

98
推荐指数
10
解决办法
8万
查看次数

在python中为DSL编写编译器

我正在用python编写一个游戏,并决定为地图数据文件创建一个DSL.我知道我可以用regex编写自己的解析器,但我想知道是否有现成的python工具可以更容易地做到这一点,比如在PHP引擎中使用的re2c.

一些额外的信息:

  • 是的,我确实需要DSL,即使我没有,我仍然需要在项目中构建和使用它的经验.
  • DSL只包含数据(声明?),它不会被"执行".大多数行看起来像:

    SOMETHING: !abc @123 #xyz/123

    我只需要阅读数据树.

python dsl dsl-tools

6
推荐指数
4
解决办法
7484
查看次数