Как разобрать одинарную кавычку в PyMOL

Я пишу парсер для разбора файлов PyMOL (язык биоинформатики). Я знаю, что char с двойными кавычками создает строку типа "text". Но одинарная кавычка ' отличается. Вот пример строк PyMOL с этим странным символом.

load dat/names.pdb

select test,name O4'
select test,*/O4'

select test,*/O4'+O3'
select test,(*/O4',O3')
select test,name O4'+O3'
select test,name "O4'+O3'"

select test,name O4'+Na\+
select test,(name Na\+,O4')
select test,name Na\++O4'
select test,*/Na\++O4'

select test,*/O4'+O4

select test,*/O2\*+O2

select test,*/O2\*+O2'

К каким языковым токенам относится эта цитата? Как раскрасить такие линии? Может быть, кавычка-это символ слова или символ-разделитель? В одном примере файла я видел такое использование цитаты, это строковый токен 'text':

iterate (all),resn = 'NON'

Это корректный код, взятый из репозитория PyMOL GitHub< /а>.


person Prog1020    schedule 05.10.2019    source источник


Ответы (1)


PyMOL — это больше программное обеспечение, чем язык. Однако он предоставляет набор команд для поддержки некоторых сценариев Python. Ваш файл содержит набор таких команд.

Первая команда load dat/names.pdb загружает файл pdb (текстовый файл, содержащий трехмерные координаты, имена и другие данные об атомах из молекулы, обычно — но не всегда — белка). Полную документацию по файлам pdb можно найти здесь.

Вторая и последующие команды создают выборку PyMOL (по сути, список атомов) в соответствии с специфическим синтаксисом. Ключевое слово name указывает, что вы хотите выбрать атомы, имя которых содержит строку O4' (для первой команды select). Обратите внимание, что одинарная кавычка является частью имени атома, а НЕ токеном языка. Обычно имена атомов с одинарными кавычками указывают на атомы из нуклеиновых кислот (ДНК или РНК).

Команда iterate (all),resn = 'NON' — это команда PyMOL для перебора всех атомов выборки; здесь выбор равен (all), что означает все атомы, загруженные в сеансе. Но синтаксис мне не кажется правильным. Я предполагаю, что вы хотите выполнить итерацию по всем атомам, принадлежащим остаткам с именем NON, и в этом случае ваша команда должна выглядеть как iterate (resn NON), print name, чтобы напечатать, например, имя всех атомов выделения. Если вы хотите изменить имя остатков всех атомов на NON, вам следует рассмотреть возможность использования команды PyMOL alter вместо этого.

person Eiffel    schedule 16.10.2019
comment
Это действительный код, взятый с github.com/ Шредингер/pymol-open-source/blob/master/test/inp/ - person Prog1020; 16.10.2019
comment
Я только заявляю, что опубликованная вами команда iterate неверна. Остальные являются допустимыми командами PyMOL, причем одинарные кавычки являются частью имен атомов. - person Eiffel; 16.10.2019