%{ /* Author: Ram Samudrala (me@ram.org) * * January 28, 1995. */ #include "mRNA.h" %} /* The attributes of certain terminals and non-terminals */ %union { int codon_type; char *identifier_value; } /* The nucleotides */ %token A C G UR /* The unknown token */ %token UNKNOWN /* The amino acids */ %token LEU PHE CYS TRP TYR VAL GLY ALA ASP PRO ARG %token HIS GLN SER MET THR ILE ASN LYS GLU %token START TERM /* Non-terminals that have a specific type */ %type codon untranslated_codon hydrophobic_side_chain %type charged_side_chain polar_side_chain %type leu phe cys trp tyr val gly ala asp pro arg his %type gln ser met thr ile asn lys glu amber ochre opal /* The starting non-terminal */ %start protein %% protein : mRNA ; mRNA : untranslated_region translated_region untranslated_region ; translated_region : start_codon amino_acid_chain terminator { print_codon(TERM); } ; start_codon : met { print_codon(START); } ; amino_acid_chain : amino_acid_chain codon { print_codon($2); } | /* empty */ ; untranslated_region : untranslated_region untranslated_codon | /* empty */ ; codon : hydrophobic_side_chain | charged_side_chain | polar_side_chain | gly ; hydrophobic_side_chain : ala | val | leu | ile | phe | pro | met ; charged_side_chain : asp | glu | lys | arg ; polar_side_chain : ser | tyr | cys | asn | gln | his | thr | trp ; terminator : ochre | opal | amber ; untranslated_codon : leu | phe | cys | trp | tyr | val | gly | ala | glu | asp | pro | arg | his | gln | ser | thr | ile | asn | lys | ochre | opal | amber ; lys : A A purine { $$ = LYS; } ; asn : A A pyrimidine { $$ = ASN; } ; ile : A UR pyrimidine { $$ = ILE; } | A UR A { $$ = ILE; }; thr : A C base { $$ = THR; } ; met : A UR G { $$ = MET; } ; ser : A G pyrimidine { $$ = SER; } | UR C base { $$ = SER; } ; gln : C A purine { $$ = GLN; } ; his : C A pyrimidine { $$ = HIS; } ; arg : C G base { $$ = ARG; } | A G purine { $$ = ARG; } ; pro : C C base { $$ = PRO; } ; asp : G A pyrimidine { $$ = ASP; } ; glu : G A purine { $$ = GLU; } ; ala : G C base { $$ = ALA; } ; gly : G G base { $$ = GLY; } ; val : G UR base { $$ = VAL; } ; tyr : UR A pyrimidine { $$ = TYR; } ; trp : UR G G { $$ = TRP; } ; cys : UR G pyrimidine { $$ = CYS; } ; phe : UR UR pyrimidine { $$ = PHE; } ; leu : UR UR purine { $$ = LEU; }| C UR base { $$ = LEU; } ; amber : UR A G { $$ = TERM; } ; ochre : UR A A { $$ = TERM; } ; opal : UR G A { $$ = TERM; } ; base : purine | pyrimidine ; pyrimidine : C | UR ; purine : A | G ; %%