我正在创建一个允许布尔表达式的搜索表单,例如:“foo AND bar”或“foo AND NOT bar”.
是否有PHP,Ruby或Java库可以将布尔表达式转换为具体的语法树?
(我可以编写自己的词法分析器/解析器,但我宁愿使用经过试验和测试的东西)
编辑:澄清一下,我不是解析心律失常的表达.它将用于解析允许布尔运算符的全文查询.
解决方法:
我推荐Treetop.这是一种为您的PEG生成解析器的小型语言(Parsing Expression Grammar).它比LALR语法更容易使用,并且比递归下降解析器更强大(即它可以做一些超过一个符号的前瞻).
虽然Treetop并不复杂,但开始时有一些简单的例子是有帮助的.你会在threedaymonk’s treetop examples找到它们.