This is exactly what I need. Thank you!
I already have a solution coded up and mostly working. My only followup question is: how do you get this to allow recursive SMART statements, I have a SMART filter for Epoxides: [$([#7+][OX1-]),$([#7v5]=[OX1]);!$([#7](~[O])~[O]);!$([#7]=[#7])]
However, this throws a ParseException error at line 1, column 1:
Exception in thread "main" chemaxon.nfunk.jep.ParseException: Error while compiling expression:
[$([#7+][OX1-]),$([#7v5]=[OX1]);!$([#7](~[O])~[O]);!$([#7]=[#7])]
Encountered "[" at line 1, column 1.
Was expecting one of:
<EOF>
";" ...
"+" ...
"-" ...
<NOT> ...
<STRING_LITERAL> ...
<INTEGER_LITERAL> ...
<FLOATING_POINT_LITERAL> ...
<IDENTIFIER> ...
"(" ...
at chemaxon.nfunk.jep.JEP.parseExpression(JEP.java:437)
at chemaxon.jep.ChemJEP.compile(ChemJEP.java:118)
at chemaxon.jep.Evaluator.compile(Evaluator.java:955)
at chemaxon.jep.Evaluator.compile(Evaluator.java:872)
at ChemAxionMain.runEvaluator(ChemAxionMain.java:27)
at ChemAxionMain.main(ChemAxionMain.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by:
chemaxon.nfunk.jep.ParseException: Encountered "[" at line 1, column 1.
Was expecting one of:
<EOF>
";" ...
"+" ...
"-" ...
<NOT> ...
<STRING_LITERAL> ...
<INTEGER_LITERAL> ...
<FLOATING_POINT_LITERAL> ...
<IDENTIFIER> ...
"(" ...
at chemaxon.nfunk.jep.Parser.generateParseException(Parser.java:1761)
at chemaxon.nfunk.jep.Parser.jj_consume_token(Parser.java:1641)
at chemaxon.nfunk.jep.Parser.Start(Parser.java:60)
at chemaxon.nfunk.jep.Parser.parseStream(Parser.java:26)
at chemaxon.nfunk.jep.JEP.parseExpression(JEP.java:404)
at chemaxon.jep.ChemJEP.compile(ChemJEP.java:118)
at chemaxon.jep.Evaluator.compile(Evaluator.java:955)
at chemaxon.jep.Evaluator.compile(Evaluator.java:872)
at ChemAxionMain.runEvaluator(ChemAxionMain.java:27)
Thanks so much for your help thus far! I greatly appreciate it.