Как разобрать символ одинарной кавычки в PyMOL - PullRequest
0 голосов
/ 05 октября 2019

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

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

iterate (all),resn = 'NON'

Это действительный код, взятый из PyMOL GitHub repo .

1 Ответ

0 голосов
/ 16 октября 2019

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.

...