RQC-HU / sum_dirac_dfcoef

This program summarizes the coefficients from DIRAC (http://diracprogram.org) output file that the .ANALYZE option and *PRIVEC and .VECPRI options in **ANALYZE section are used. (c.f. http://www.diracprogram.org/doc/release-23/manual/analyze/privec.html)
https://pypi.org/project/sum-dirac-dfcoef/
GNU Lesser General Public License v2.1
0 stars 0 forks source link

示性式のサポート #14

Closed kohei-noda-qcrg closed 1 year ago

kohei-noda-qcrg commented 1 year ago

背景

-m, --molオプションについて

例えば酢酸を計算したときに 現時点では C2H4O2 と指定する必要があるが

CH3COOH という書き方をサポートしたほうがいいはず

問題点

① H2C=CHCH2CH3 のようなフォーマットをどうするか 直感的には単に正規表現で[a-zA-Z0-9]のものだけを抜き出してからHが何個あるか、Cが何個あるか...と数え上げればよい?

② UO2_2+ のようなイオンをどう扱うか、フォーマットはどうするか 2+には2という数字があるので、①のように単に正規表現で抜き出してくると、この例だとUO22の計算をしたと勘違いしてしまう 従ってイオンの価数や金属錯体の価数などを-mオプションに書かれるとパースがかなり面倒になる →一旦は価数の表記はユーザー側が書かないと仮定して、示性式をサポートできるか実装してみることにする(オプションの説明などにイオンや価数の数値は書かないように知らせる)

kohei-noda-qcrg commented 1 year ago

シクロヘキサン (CH2)6 みたいな記法はサポートしたほうが(そもそも示性式はそういう記法だし) メリットが大きいかもしれない

正規表現的には [a-zA-Z0-9()] で、カッコの中の原子の数を)の直後の数値でかけるだけでよいので比較的簡単なはず

kohei-noda-qcrg commented 1 year ago

ネストされた示性式をサポートするには次の2つの方法くらい

後ろから読むと実装にミスが発生しやすそうなので、構文解析を行う方向で。

EBNF (atomだけは並べるのが面倒すぎるので省略) digit_exclude_zero::= '1', '2', '3', '4', '5', '6', '7', '8', '9' digit::= '0' | digit_exclude_zero natural_number ::= digit_exclude_zero, {digit} atom::= 'H' | 'He' | 'Li' | 'Be' | 'B' | 'C' | 'N' | 'O' | 'F' | 'Ne' | ... | 'Rg' atom_number::= atom, natural_number bra::= '(' | '[' | '{' ket::= ')' | ']' | '}' nests ::= bra, { nests | atom_number }, ket, [natural_number] molecule::= nests | { atom_number }

kohei-noda-qcrg commented 1 year ago

パッケージ化したほうがいいかもと思って pymolecule-parser という名前で作成した