相关疑难解决方法(0)

学习编写一个编译器

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

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

language-agnostic compiler-construction

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

评估一串简单的数学表达式

挑战

这是挑战(我自己的发明,但如果以前出现在网络的其他地方,我不会感到惊讶).

编写一个函数,该函数采用单个参数,该参数是简单数学表达式的字符串表示形式,并将其作为浮点值进行计算."简单表达"可以包括以下任何一种:正十进制数或负十进制数,+,-,*,/,(,).表达式使用(正常)中缀表示法.操作员应按其出现的顺序进行评估,即不像BODMAS中那样进行 评估,但当然应该正确观察括号.该函数应该为此表单的任何可能表达式返回正确的结果.但是,该函数不必处理格式错误的表达式(即语法错误的表达式).

表达的例子:

1 + 3 / -8                            = -0.5       (No BODMAS)
2*3*4*5+99                            = 219
4 * (9 - 4) / (2 * 6 - 2) + 8         = 10
1 + ((123 * 3 - 69) / 100)            = 4
2.45/8.5*9.27+(5*0.0023)              = 2.68...
Run Code Online (Sandbox Code Playgroud)

规则

我预计会有某种形式的"作弊"/狡猾,所以请让我预先反对它!通过作弊,我指的是eval在动态语言(如JavaScript或PHP)中使用或等效函数,或者同时编译和执行代码.(我认为我的"没有BODMAS"的规格几乎可以保证这一点.)除此之外,没有任何限制.我在这里预计会有一些Regex解决方案,但不仅仅是这样,我们会感到很高兴.

现在,我主要对C#/ .NET解决方案感兴趣,但是任何其他语言都是完全可以接受的(特别是F#和Python用于功能/混合方法).我还没有决定我是否会接受最短或最巧妙的解决方案(至少对于语言而言)作为答案,但我欢迎任何语言的任何形式的解决方案,除了我刚才禁止的!

我的解决方案

我现在在这里发布了我的C#解决方案(403个字符).更新: …

math parsing code-golf infix-notation text-parsing

76
推荐指数
21
解决办法
1万
查看次数

Code Golf:数学表达式评估器(尊重PEMDAS)

我挑战你写一个数学表达式评估器,它尊重PEMDAS(操作顺序:括号,取幂,乘法,除法,加法,减法)而不使用正则表达式,一个预先存在的"Eval()" - 类似函数,一个解析库等

我在SO(这里)看到了一个预先存在的评估者挑战,但那个特别需要从左到右的评估.

样本输入和输出:

"-1^(-3*4/-6)" -> "1"

"-2^(2^(4-1))" -> "256"

"2*6/4^2*4/3" -> "1"
Run Code Online (Sandbox Code Playgroud)

我在C#中编写了一个评估器,但是我想看看它与那些选择语言的智能程序员相比有多糟糕.

有关:

Code Golf:评估数学表达式

澄清:

  1. 让我们使这个函数接受一个字符串参数并返回一个字符串结果.

  2. 至于为什么没有正则表达式,那就是平衡竞争环境.我认为"最紧凑的正则表达式"应该有一个单独的挑战.

  3. 使用StrToFloat()是可以接受的.通过"解析库",我的意思是排除诸如通用语法解析器之类的东西,也用于平衡游戏场.

  4. 支持浮动.

  5. 支持paretheses,取幂和四个算术运算符.

  6. 赋予乘法和除法优先权.

  7. 赋予加法和减法相同的优先权.

  8. 为简单起见,您可以假设所有输入都是格式良好的.

  9. 我不喜欢你的函数是否接受".1"或"1e3"之类的东西作为有效数字,但是接受它们会获得布朗尼积分.;)

  10. 对于除零情况,您可能会返回"NaN"(假设您希望实现错误处理).

math parsing code-golf rosetta-stone

26
推荐指数
6
解决办法
6276
查看次数

数学表达式求值程序的简单库或实现

我有一个只包含一行的文本文件,该行只包含一个数学表达式,例如12+(3.0*(4)-1)/ sqrt(121)

我的程序需要将此express表示为字符串,然后给出结果
13

是否有任何简单的方法或第三方dll/lib来实现这一目标?

评论增加:

评估一串简单的数学表达式

这里是解决方案,但许多解决方案只包含+ - /*,我需要尽可能多的运营商,如天花板方形平方根和功率()

所以这个链接可能是最好的解决方案
http://www.codeproject.com/KB/recipes/sota_expression_evaluator.aspx

c c# c++ c++11

14
推荐指数
2
解决办法
2837
查看次数

c表达式评估者取2

参考以下公认的解决方案:SO:expression_evaluator

任何人都可以提供一个与否定一起使用的版本吗?像

((!(0 or !1) and !((0 or 1 or 1) and !1))
Run Code Online (Sandbox Code Playgroud)

也需要工作.

我得到它的工作,所以否定0或1是好的,但我不能让它与整个群体的否定一起工作(!在括号开头)

我尝试在*expr =='中返回eval之后否定tmp('阻止..如果!在调用它之前已经看过了,但是这不起作用.

c expression

0
推荐指数
1
解决办法
182
查看次数