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.