Полуэмпирические формулы
    
        Posted on January 29, 2016 with tags: химия.
    
Полуэмпирические формулы могут содержать три оротогональных компонента: заряды фрагментов, функциональные группы и плейсхолдеры.
quantifier    = nat > 1
signum        = '+' | '-'
charge        = '(' '+' + ')' | '(' '-' + ')' | '(' quantifier signum ')' | '(' signum quantifier ')'
isotope       = '[' nat atom ']' | '[' atom ']'
placeholder   = '[' [A..z][a..z]* `notElem` element table ']'
              | '[' [A..z][a..z0..9]* ']'
atom          = [A..Z][a..z]{0,2} `elem` element table
linker        = '-' | '=' | '#'
halfempirical = linker{0,1} node linker{0,1} rest*
rest          = node linker{0,1}
unchargednode = isotope quantifier{0,1}
              | atom quantifier{0,1}
              | '(' linker{0,1} unchargednode  ')' quantifier{0,1}
node          = isotope charge{0,1} quantifier{0,1}
              | atom charge{0,1} quantifier{0,1}
              | '(' halfempirical ')' charge{0,1} quantifier{0,1}