Parsing 解析数学规则(有一些额外的功能)和Soulver(Mac应用程序)一样

Parsing 解析数学规则(有一些额外的功能)和Soulver(Mac应用程序)一样,parsing,language-design,Parsing,Language Design,是一个很好的数学记事本,可以让你以一种非常自然的形式来写表达式,这使得它在很多场合都是多功能和有趣的。网站上有一段短视频,显示了它的许多功能 我想解决编写一个语法分析器的问题,该语法分析器的行为与该应用程序的行为非常相似。例如,如果你去购物,你可以写一个大的清单,比如 2 * 1.99 soap + 2.99 cereal + 39.59 organic magic beans 当你打字的时候,看看这行的总和(46.56) 您还可以创建变量,例如 March = 2 * 1.99 soap

是一个很好的数学记事本,可以让你以一种非常自然的形式来写表达式,这使得它在很多场合都是多功能和有趣的。网站上有一段短视频,显示了它的许多功能

我想解决编写一个语法分析器的问题,该语法分析器的行为与该应用程序的行为非常相似。例如,如果你去购物,你可以写一个大的清单,比如

2 * 1.99 soap + 2.99 cereal + 39.59 organic magic beans 
当你打字的时候,看看这行的总和(46.56)

您还可以创建变量,例如

March = 2 * 1.99 soap + 2.99 cereal + 39.59 organic magic beans 
并在以后的操作中引用它们。其他运营商,如“off”(200美元40%的折扣)也存在


考虑到它有一定程度的复杂性,它应该在忽略一些输入的同时区分有意义的术语,我应该用什么样的语法来表示这种小语言?我可能会拼凑一些意大利面正则表达式,但老实说,我想做得更好一点,即使这需要我这方面的大量研究。你会推荐什么?

如果你想对真实的数学建模,例如,任何带有嵌套括号的东西,regexp本身的表达能力可能不够

上下文无关语法非常有表现力。您应该了解,这是一种将语言描述写为上下文无关语法的方法。
您可以从许多解析器生成器工具中进行选择,以将该语法转换为真正的解析器

你写哪种特定的语法取决于你希望表达式的意思,以及表达式中哪些原子真正被忽略。
实际上,编写BNF的方式因工具而异,因此,首先选择解析器生成器工具可以省去以后重写BNF的麻烦。

因此,您希望
off
有时被忽略,在其他情况下,我们希望它是
X%offy
中的一个运算符?这就是Soulver的行为方式——当前面的术语是百分比时,off具有运算符语义。这将是一个合理的解析器生成/执行工具。几乎所有其他工具(YACC、JavaCC、ANTLR等)也会如此;与现代编程语言相比,表达式(甚至是Soulver的)并不是很复杂,所有这些工具都可以做到。谢谢你,Ira。我要走那条路。