Created
December 14, 2014 17:39
-
-
Save MattOates/5eea9bfe9864e5aa4ffa to your computer and use it in GitHub Desktop.
Day 15 of the Perl6 2014 Advent Calendar
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
grammar FASTA::Grammar { | |
token TOP { <record>+ } | |
token record { ">"<id><comment>?"\n"<sequence> } | |
token id { <-[\ \n]>+ } | |
token comment { " "<-[\n]>+ } | |
proto rule sequence {*} | |
rule sequence:sym<dna> { <[ACGTRYKMSWBDHVNX\-\n]>+ } | |
rule sequence:sym<rna> { <[ACGURYKMSWBDHVNX\-\n]>+ } | |
rule sequence:sym<aa> { <[A..Z\*\-\n]>+ } | |
} | |
class Seq { | |
has Str $.id = ""; | |
has Str $.comment = ""; | |
has Str $.sequence = ""; | |
multi method Numeric (Seq:D: --> Numeric) { | |
$.sequence.codes; | |
} | |
multi method Bag (Seq:D: --> Bag) { | |
bag $.sequence.comb; | |
} | |
multi method Str (Seq:D: --> Str) { | |
$.sequence; | |
} | |
multi method gist (Seq:D: --> Str) { | |
">$.id $.comment\n$.sequence"; | |
} | |
} | |
class FASTA::Actions { | |
method TOP($/) { | |
make $<record>>>.ast; | |
} | |
method record($/) { | |
make Seq.new( | |
id => ~$<id>, | |
comment => ($<comment>) ?? (~$<comment>).trim !! '', | |
sequence => $<sequence>.subst("\n","", :g) | |
); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
TOP | |
> | |
| record | |
> | |
| | id | |
> | |
| | * MATCH "hello" | |
> | |
| | comment | |
> | |
| | * FAIL | |
> | |
| | sequence | |
> | |
| | | sequence:sym<dna> | |
> | |
| | | * MATCH "GCTATATAAGC\n" | |
> | |
| | * MATCH "GCTATATAAGC\n" | |
> | |
| * MATCH ">hello\nGCTATATAAGC\n" | |
> | |
| record | |
> | |
| | id | |
> | |
| | * MATCH "world" | |
> | |
| | comment | |
> | |
| | * MATCH " prot" | |
> | |
| | sequence | |
> | |
| | | sequence:sym<dna> | |
> | |
| | | * FAIL | |
> | |
| | | sequence:sym<rna> | |
> | |
| | | * FAIL | |
> | |
| | | sequence:sym<aa> | |
> | |
| | | * MATCH "TATAKEKEKELKL\n" | |
> | |
| | * MATCH "TATAKEKEKELKL\n" | |
> | |
| * MATCH ">world prot\nTATAKEKEKELKL\n" | |
> | |
| record | |
> | |
| * FAIL | |
> | |
* MATCH ">hello\nGCTATATAAGC\n>world prot\nTATAKEKEKELKL\n" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
>hello | |
GCTATATAAGC | |
>world prot | |
TATAKEKEKELKL |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment