BioLegato - PCD: Python-esque Command Definition
From Bioinformatics.Org Wiki
Click here to go back to: BioLegato
Contents |
Version #1. Informal Syntax and Semantics of PCD.
GENERAL FORMAT OF THE SYNTAX %<VARIABLE> label <LABEL_STR> type <TYPES> default <VALUE> #FOR slider TYPE min <VALUE> max <VALUE> #FOR file TYPE format <FILE FORMAT TYPES> save <SAVE_VALUE> overwrite <OVERWRITE_VALUE> content <CONTENT_VALUE> #FOR chooser or choice_menu TYPE choices <LABEL_CHOICES> <VALUES> #FOR button TYPE command <COMMAND_STR>
<LABEL_STR> : any string <TYPES>: slider, text, tempfile, chooser, choice_menu, button <VALUE>: For silder type: numerical. For text type: string. For chooser type: depend of the choice <FILE FORMAT TYPES>: FASTA, GDE, GebBank, etc <SAVE_VALUE>: BOOLEAN: true or false <OVERWRITE_VALUE>: BOOLEAN: true or false <CONTENT_VALUE: empty or canvas <COMMAND_STR>: string with the command line
It was obtained to have the same behavior as the GDEMenu syntax.
We have proven this version, developing the Conversion Software Application (from GDE to PCD) and the parsing program ==> it is working OK.
Preliminary file conversion done
From here, we get the strict BNF notation and the general notation
PCD version 1 defined using BNF (Backus-Naur Form) Metalanguage
Version #2
We have to include in the syntax new features:
BioLegato - Internal format discussion
Proposals to choose the version #2
Proposal #1 - From Pythom
Examples:
Object/sequence variables %START type slider min 0 max len(@sequence) Conditional variables %END type slider min if len(@sequence) < 50 0 else 50 max 1000 Tabbed Panes ^Group 1 %Data 1 type slider min 0 max 100 ..... ^Group 2 %Data 2 type text label Number of: .....
Proposal #2 - Simplification
Examples:
Object/sequence variables %START type slider min 0 max @sequence.length Conditional variables %END type slider min !(@sequence.length < 50 ? 0 : 50) max @sequence.length Tabbed Panes ^ Group 1 %Data 1 type slider min 0 max 100 ..... ^ Group 2 %Data 2 type text label Number of: .....
Proposal #3 - Verbose
Examples:
all code can be embedded by <{}> and interpreted as such tab Tab1 var START min 0 max <{ $sequence.length }> default <{ if sequence.length > 50 write 50 else write $sequence.length }> var END min 0 ,,,, tab Tab2 var ABC ...
Proposal #4 - Hybrid
Examples:
all code can be embedded by <{}> and interpreted as such Object/sequence variables %START type slider min 0 max @sequence.length Conditional variables %END type slider min <{ if (sequence.length < 50) then 0 else 50 print "tea time!" }> max @sequence.length Tabbed Panes ^Group 1 %Data 1 type slider min 0 max 100 ..... ^Group 2 %Data 2 type text label Number of: ..... Comments: # abc ##### xyz ### *** # all comments are defined as a sequence of # followed by a mandatory space (or new line if you only want to use #'s in the comment). Following the mandaory space you may use any combination of # characters to define your comment, as the parser will ignore any line beginning with one or more #'s followed by a space (or any line containing only #'s). # as a regular expression /#*(\s[^\n]*)?/
- we use <{ and }> because they are uncommon and do not need to be escaped often
Proposal #5 - Verbose-est
Examples:
#Variables are defined using "var" name var START type slider min 0 max @sequence.length #values from the sequence in the canvas are taken as @sequence error #SANITY CHECKING possible errors are define with "error" word. higher_than_0 #SANITY CHECKING This is the kind of error associated to this variable #Conditional variables var END type slider min if (@sequence.length < 50) then min=0 #natural conditional instructions. As other languages else min=50 max @sequence.length #Tabbed Panes. Tabs are defined using "tab" name tab Group 1 var Data 1 type slider min 0 max 100 var Data 2 type text default xxxx error blank_string tab Group 2 var Data 3 type text label Number of: .................. #to include ICONS in this menu option icon /image1.png #to include MOUSE-OVER TOOL TIPS in this menu option tip "Number a Sequence" #to define DEPENDENTS/CONDITIONS var x1 type slider min 0 max 1000 var x2 type slider min 100 max 500 dependence if x1 >= 100 then default=100 else default=grayed_out var x3 type slider min 100 max 500 dependence if x1+x2 >= 100 then default=x1+x2 else default=grayed_out Comments: # abc ##### xyz ### *** # all comments are defined as a sequence of # followed by a mandatory space (or new line if you only want to use #'s in the comment). Following the mandaory space you may use any combination of # characters to define your comment, as the parser will ignore any line beginning with one or more #'s followed by a space (or any line containing only #'s). # as a regular expression /#*(\s[^\n]*)?/
Proposal #6 - simplifying things
Examples:
#### # NOTE: All indentation should be 3 spaces; however, because this has been formatted multiple times, this Wiki version may contain uneven spacing # NOTE: Fields can be defined inline (e.g. type "ABC") #### # All strings must be put in quotation marks name "NUMSEQ - ...." #to include ICONS in this menu option icon "image1.png" #to include MOUSE-OVER TOOL TIPS in this menu option tip "Number a Sequence" #Variables are defined using "var" name var START type "slider" min 0 max sequence.length #values from the sequence in the canvas are taken as @sequence check #SANITY CHECKING possible errors are define with "error" word. if START < 0 then error_message "value less than 0" #SANITY CHECKING This is the kind of error associated to this variable #Conditional variables var END type "slider" min if (@sequence.length < 50) then min=0 #natural conditional instructions. As other languages else min=50 max sequence.length #Tabbed Panes. Tabs are defined using "tab" name tab Group 1 var Data 1 type "slider" min 0 max 100 var Data 2 type "text" default "xxxx" check if text = "" error = "This variable should not be empty" #SANITY CHECKING This is the kind of error associated to this variable tab Group 2 var Data 3 type "text" label Number of: .................. #to define DEPENDENTS/CONDITIONS var x1 type "slider" min 0 max 1000 var x2 type "slider" min 100 max 500 dependence #Dependent condition if x1 >= 100 default=100 else default=grayed_out var x3 type "slider" min 100 max 500 check #Dependent condition if x1+x2 >= 100 then default=x1+x2 else default=grayed_out Comments: # abc ##### xyz ### *** # all comments are defined as a sequence of # followed by a mandatory space (or new line if you only want to use #'s in the comment). Following the mandaory space you may use any combination of # characters to define your comment, as the parser will ignore any line beginning with one or more #'s followed by a space (or any line containing only #'s). # as a regular expression /#*(\s[^\n]*)?/
Proposal 6 EBNF (dynamic indent/dedent version)
<file> ::= <section> <file> | <section> <section> ::= <param> | <tab> | <ofield> <ofield> ::= <t_name> <text> | <t_icon> <text> | <t_tip> <text> | <t_system> <indent> <systems> <dedent> <systems> ::= <systems> <nl> <system> | <system> <system> ::= <t_all> | <t_linux32> | <t_linux64> | <t_osx_x86> | <t_sunsparc> | <t_sunx64> | <t_win32> <tab> ::= <t_tab> <name> <indent> <params> <dedent> <params> ::= <param> <nl> <params> | <param> <param> ::= <t_param> <indent> <pfields> <dedent> <pfields> ::= <pfield> <nl> <pfields> | <pfield> <pfield> ::= <t_name> <ptext> | <t_type> <ptext> | <t_default> <ptext> | <t_default> <pnum> | <t_default> <pbool> | <t_min> <pnum> | <t_max> <pnum> | <t_format> <file_format> | <t_save> <pbool> | <t_overwrite> <boolean_value> | <t_content> <content_value> | <t_shell> <ptext> | <t_close> <pbool> | <t_choices> <indent> <choice_list> <dedent> <file_format> ::= <t_fasta> | <t_gde> | <t_genbank> | <t_flat> | <t_raw> <choice_list> ::= <identifier> <space> <number> | <identifier> <space> <text> | <identifier> <indent> <number <dedent> | <identifier> <indent> <text> <dedent> <pnum> ::= <space> <number> | <indent> <number> <dedent> <pbool> ::= <space> <bool> | <indent> <bool> <dedent> <ptext> ::= <space> <text> | <indent> <text> <dedent> <name> ::= <identifier> <bool> ::= <t_true> | <t_false> <var> ::= <identifier> SPECIAL ******* <comment> ::= <hash_symbols> <space> <unbound_text> | <hash_symbols> <space> | <hash_symbols> <hash_symbols> ::= '#' <hash_symbols> | '#' <nl> ::= new line separator (no indentation change) <indent> ::= increase indentation by 3 spaces (matches newline) <dedent> ::= decrease indentation by 3 spaces (matches newline) KEYWORDS ******** <t_all> ::= 'all' <t_choices> ::= 'choices' <t_close> ::= 'close' <t_content> ::= 'content' <t_default> ::= 'default' <t_false> ::= 'false' <t_fasta> ::= 'fasta' <t_flat> ::= 'flat' <t_format> ::= 'format' <t_gde> ::= 'gde' <t_genbank> ::= 'genbank' <t_icon> ::= 'icon' <t_linux32> ::= 'linux32' <t_linux64> ::= 'linux64' <t_max> ::= 'max' <t_min> ::= 'min' <t_name> ::= 'name' <t_osx64> ::= 'osx86_64' <t_ovwerwrite> ::= 'overwrite' <t_param> ::= 'var' <t_raw> ::= 'raw' <t_tab> ::= 'tab' <t_tip> ::= 'tip' <t_true> ::= 'true' <t_type> ::= 'type' <t_save> ::= 'save' <t_shell> ::= 'shell' <t_sunsparc> ::= 'sunsparc' <t_sunx64> ::= 'sunx86' <t_win32> ::= 'win32' TOKENS ****** <space> ::= ' ' <space> | '\t' <space> | ' ' | '\t' <number> ::= <digits> '.' <digits> | <digits> <digits> ::= <digit> <digits> | <digit> <digit> ::= 0 - 9 <unbound_text> ::= any character <text> ::= '"' <quoted_text> '"' <quoted_text> ::= any non " character | '"' '"'
Proposal 6 EBNF (limited/static indent version - this is if the above system won't work) - pre-programming code
<file> ::= <section> <nl> <file> | <section> <section> ::= <param> | <tab> | <ofield> | <blank_line> <ofield> ::= <t_name> <text> | <t_icon> <text> | <t_tip> <text> | <t_system> <indent> <systems> <dedent> <systems> ::= <systems> <nl> <system> | <system> <system> ::= <t_all> | <t_linux32> | <t_linux64> | <t_osx_x86> | <t_sunsparc> | <t_sunx64> | <t_win32> <param> ::= <t_param> <nl> <pfields> <pfields> ::= <ind> <pfield> <nl> <pfields> | <ind> <pfield> <pfield> ::= <text_param> <inda> <text> | <num_param> <inda> <number> | <bool_param> <inda> <bool> | <any_param> <inda> <any_type> | <t_format> <inda> <file_format> | <t_content> <inda> <content_value> | <t_choices> <nl> <choice_list> <choice_list> ::= <identifier> <indb> <any> <nl> <choice_list> | <identifier> <indb> <any> <nl> <tab> ::= <t_tab> <name> <nl> <tparams> <tparams> ::= <ind> <tparam> <nl> <tparams> | <ind> <tparam> <tparam> ::= <ind> <t_param> <nl> <tpfields> <tpfields> ::= <ind> <ind> <tpfield> <nl> <tpfields> | <ind> <ind> <tpfield> <tpfield> ::= <text_param> <indb> <ptext> | <num_param> <indb> <number> | <bool_param> <indb> <bool> | <any_param> <indb> <any_type> | <t_format> <indb> <file_format> | <t_content> <indb> <content_value> | <t_choices> <nl> <tchoice_list> <choice_list> ::= <identifier> <indc> <any> <nl> <choice_list> | <identifier> <indc> <any> <nl> <inda> ::= <space> | <nl> <ind> <ind> <indb> ::= <space> | <nl> <ind> <ind> <ind> <indc> ::= <space> | <nl> <ind> <ind> <ind> <ind> <name> ::= <identifier> TYPES ***** <bool> ::= <t_true> | <t_false> <text> ::= '"' <quoted_text> '"' <number> ::= <digits> '.' <digits> | <digits> TOKEN CLASSES ************* <any_type> ::= <bool> | <text> | <number> <any_param> ::= <t_default> <text_param> ::= <t_name> | <t_type> | <t_shell> <num_param> ::= <t_min> | <t_max> <bool_param> ::= <t_close> | <t_save> | <t_overwrite> <file_format> ::= <t_fasta> | <t_gde> | <t_genbank> | <t_flat> | <t_raw> SPECIAL ******* <comment> ::= <hash_symbols> <space> <unbound_text> | <hash_symbols> <space> | <hash_symbols> <hash_symbols> ::= '#' <hash_symbols> | '#' <blank_line> ::= <space> <blank_line> KEYWORDS ******** <t_all> ::= 'all' <t_choices> ::= 'choices' <t_close> ::= 'close' <t_content> ::= 'content' <t_default> ::= 'default' <t_false> ::= 'false' <t_fasta> ::= 'fasta' <t_flat> ::= 'flat' <t_format> ::= 'format' <t_gde> ::= 'gde' <t_genbank> ::= 'genbank' <t_icon> ::= 'icon' <t_linux32> ::= 'linux32' <t_linux64> ::= 'linux64' <t_max> ::= 'max' <t_min> ::= 'min' <t_name> ::= 'name' <t_osx64> ::= 'osx86_64' <t_ovwerwrite> ::= 'overwrite' <t_param> ::= 'var' <t_raw> ::= 'raw' <t_tab> ::= 'tab' <t_tip> ::= 'tip' <t_true> ::= 'true' <t_type> ::= 'type' <t_save> ::= 'save' <t_shell> ::= 'shell' <t_sunsparc> ::= 'sunsparc' <t_sunx64> ::= 'sunx86' <t_win32> ::= 'win32' TOKENS ****** <space> ::= ' ' <space> | '\t' <space> | ' ' | '\t' <nl> ::= '\n' <ind> ::= ' ' <digits> ::= <digit> <digits> | <digit> <digit> ::= 0 - 9 <quoted_text> ::= anything but '"' | '"' '"' <unbound_text> ::= any character
Proposal 6 EBNF (limited/static indent version + code) - in-progress
<file> ::= <section> <nl> <file> | <section> <section> ::= <param> | <tab> | <ofield> | <blank_line> <ofield> ::= <t_name> <text> | <t_icon> <text> | <t_tip> <text> | <t_system> <indent> <systems> <dedent> <systems> ::= <systems> <nl> <system> | <system> <system> ::= <t_all> | <t_linux32> | <t_linux64> | <t_osx_x86> | <t_sunsparc> | <t_sunx64> | <t_win32> <param> ::= <t_param> <nl> <pfields> <pfields> ::= <ind> <pfield> <nl> <pfields> | <ind> <pfield> <pfield> ::= <text_param> <inda> <text> | <num_param> <inda> <number> | <bool_param> <inda> <bool> | <any_param> <inda> <any_type> | <t_format> <inda> <file_format> | <t_content> <inda> <content_value> | <t_choices> <nl> <choice_list> <choice_list> ::= <identifier> <indb> <any> <nl> <choice_list> | <identifier> <indb> <any> <nl> <tab> ::= <t_tab> <name> <nl> <tparams> <tparams> ::= <ind> <tparam> <nl> <tparams> | <ind> <tparam> <tparam> ::= <ind> <t_param> <nl> <tpfields> <tpfields> ::= <ind> <ind> <tpfield> <nl> <tpfields> | <ind> <ind> <tpfield> <tpfield> ::= <text_param> <indb> <ptext> | <num_param> <indb> <number> | <bool_param> <indb> <bool> | <any_param> <indb> <any_type> | <t_format> <indb> <file_format> | <t_content> <indb> <content_value> | <t_choices> <nl> <tchoice_list> <choice_list> ::= <identifier> <indc> <any> <nl> <choice_list> | <identifier> <indc> <any> <nl> <inda> ::= <space> | <nl> <ind> <ind> <indb> ::= <space> | <nl> <ind> <ind> <ind> <indc> ::= <space> | <nl> <ind> <ind> <ind> <ind> <name> ::= <identifier> CODE **** <code> ::= <math> | <if_then> <if_then> ::= <t_if> <cond> <t_then> <code> <cond> ::= <math> <comp> <math> <andor> <cond> | <math> <comp> <math> <andor> ::= <t_and> | <t_or> | <t_xor> <comp> ::= <t_eq> | <t_lt> | <t_gt> <math> ::= <m_open> <math> <m_close> | <norv> <op> <norv> | <norv> <op> ::= <t_plus> | <t_minus> | <t_mul> | <t_div> <norv> ::= <number> | <variable> <variable> ::= <identifier> TYPES ***** <bool> ::= <t_true> | <t_false> <text> ::= '"' <quoted_text> '"' <number> ::= <digits> '.' <digits> | <digits> TOKEN CLASSES ************* <any_type> ::= <bool> | <text> | <number> <any_param> ::= <t_default> <text_param> ::= <t_name> | <t_type> | <t_shell> <num_param> ::= <t_min> | <t_max> <bool_param> ::= <t_close> | <t_save> | <t_overwrite> <file_format> ::= <t_fasta> | <t_gde> | <t_genbank> | <t_flat> | <t_raw> SPECIAL ******* <comment> ::= <hash_symbols> <space> <unbound_text> | <hash_symbols> <space> | <hash_symbols> <hash_symbols> ::= '#' <hash_symbols> | '#' <blank_line> ::= <space> <blank_line> KEYWORDS ******** <t_all> ::= 'all' <t_and> ::= 'and' <t_choices> ::= 'choices' <t_close> ::= 'close' <t_content> ::= 'content' <t_default> ::= 'default' <t_false> ::= 'false' <t_fasta> ::= 'fasta' <t_flat> ::= 'flat' <t_format> ::= 'format' <t_gde> ::= 'gde' <t_genbank> ::= 'genbank' <t_icon> ::= 'icon' <t_if> ::= 'if' <t_linux32> ::= 'linux32' <t_linux64> ::= 'linux64' <t_max> ::= 'max' <t_min> ::= 'min' <t_name> ::= 'name' <t_or> ::= 'or' <t_osx64> ::= 'osx86_64' <t_ovwerwrite> ::= 'overwrite' <t_param> ::= 'var' <t_raw> ::= 'raw' <t_tab> ::= 'tab' <t_then> ::= 'then' <t_tip> ::= 'tip' <t_true> ::= 'true' <t_type> ::= 'type' <t_save> ::= 'save' <t_shell> ::= 'shell' <t_sunsparc> ::= 'sunsparc' <t_sunx64> ::= 'sunx86' <t_win32> ::= 'win32' <t_xor> ::= 'xor' SYMBOLIC TOKENS *************** <m_open> ::= '(' <m_close> ::= ')' <t_plus> ::= '+' <t_minus> ::= '-' <t_mul> ::= '*' <t_div> ::= '/' <t_eq> ::= '=' <t_lt> ::= '<' <t_gt> ::= '>' TOKENS ****** <space> ::= ' ' <space> | '\t' <space> | ' ' | '\t' <nl> ::= '\n' <ind> ::= ' ' <digits> ::= <digit> <digits> | <digit> <digit> ::= 0 - 9 <quoted_text> ::= anything but '"' | '"' '"' <unbound_text> ::= any character