我在网上查看了一些可用的解析器但是并不真正理解什么是最适合我的自定义表达式。 (根据我的需要,Antlr似乎有点重量级,但这只是第一印象)
我有以下表达式,需要验证它是否形成良好:
如果(VAR1> VAR2; 15; IF(VAR3&LT = VAR4; 1; 2))
表达式转换为: 如果条件为真,则结果为15,否则为另一个表达式。
我只需要验证它是否格式正确(没有额外的括号,总是有第一个和第二个分支,IF关键字被正确使用,嵌套的IF等等。)
答案 0 :(得分:1)
首先,写一个语法。否则将不清楚什么是合法的。 (你所写的内容并不准确;例如,你是否允许在关系之后有一个数字?一个变量作为IF的else部分?)语法使这一点变得精确。
其次,如果你的语法只接受表达式,你可以用手写的递归下降语法轻松编码:see my SO answer on how to do this。这样的解析器将完成你想要的所有健全性检查。
如果你试图解析一个非常复杂的语言,那么JavaCC或ANTLR是更好的选择。