Boost.Spirit風YARD


[]#include[][] <iostream>[]
[]#include[][] <fstream>[]
[]#include[][] <string>[]

[]#include[][] "biscuit/biscuit.hpp"[]

[]namespace[]
{
[]using[] []namespace[] []biscuit[];

[]struct[] []Char[] :
[]alternative[]<
[]ucs4[]<0[]x9[]>, []ucs4[]<0[]xA[]>, []ucs4[]<0[]xD[]>,
[]ucs4_range[]<0[]x20[],0[]xD7FF[]>,
[]ucs4_range[]<0[]xE000[],0[]xFFFD[]>,
[]ucs4_range[]<0[]x10000[],0[]x10FFFF[]>
>
{ };

[]struct[] []CharData[] :
[]difference[]<
[]kleene_star[]< []complement[]< []char_set[]<[]'<'[],[]'&'[]> > >,
[]sequence[]<
[]kleene_star_until[]< []complement[]< []char_set[]<[]'<'[],[]'&'[]> >, []string[]<[]']'[],[]']'[],[]'>'[]> >,
[]kleene_star[]< []complement[]< []char_set[]<[]'<'[],[]'&'[]> > >
>
>
{ };

[]struct[] []Comment[] :
[]sequence[]<
[]string[]<[]'<'[],[]'!'[],[]'-'[],[]'-'[]>,
[]kleene_star[]<
[]alternative[]<
[]difference[]< []Char[], []string[]<[]'-'[]> >,
[]sequence[]<
[]string[]<[]'-'[]>,
[]difference[]< []Char[], []string[]<[]'-'[]> >
>
>
>,
[]string[]<[]'-'[],[]'-'[],[]'>'[]>
>
{ };

[]struct[] []S[] :
[]positive[]< []char_set[]<0[]x20[],0[]x9[],0[]xD[],0[]xA[]> >
{ };

[]struct[] []Digit[] :
[]alternative[]<
[]ucs4_range[]<0[]x0030[],0[]x0039[]>, []ucs4_range[]<0[]x0660[],0[]x0669[]>
[]// too many[]
>
{ };

[]struct[] []BaseChar[] :
[]alternative[]<
[]ucs4_range[]<0[]x0041[],0[]x005A[]>, []ucs4_range[]<0[]x0061[],0[]x007A[]>
>
{ };

[]struct[] []Ideographic[] :
[]alternative[]<
[]ucs4_range[]<0[]x4E00[],0[]x9FA5[]>, []ucs4[]<0[]x3007[]>,
[]ucs4_range[]<0[]x3021[],0[]x3029[]>
>
{ };

[]struct[] []CombiningChar[] :
[]alternative[]<
[]ucs4_range[]<0[]x0300[],0[]x0345[]>, []ucs4_range[]<0[]x0360[],0[]x0361[]>
[]// too many[]
>
{ };

[]struct[] []Extender[] :
[]alternative[]<
[]ucs4[]<0[]x00B7[]>, []ucs4[]<0[]x02D0[]>, []ucs4[]<0[]x02D1[]>, []ucs4[]<0[]x0387[]>
[]// many[]
>
{ };

[]struct[] []Letter[] :
[]alternative[]< []BaseChar[], []Ideographic[] >
{ };

[]struct[] []NameChar[] :
[]alternative[]<
[]Letter[], []Digit[], []string[]<[]'.'[]>, []string[]<[]'-'[]>, []string[]<[]'_'[]>, []string[]<[]':'[]>,
[]CombiningChar[], []Extender[]
>
{ };

[]struct[] []Name[] :
[]sequence[]<
[]alternative[]< []Letter[], []string[]<[]'_'[]>, []string[]<[]':'[]> >,
[]kleene_star[]< []NameChar[] >
>
{ };

[]struct[] []Eq[] :
[]sequence[]< []optional[]<[]S[]>, []string[]<[]'='[]>, []optional[]<[]S[]> >
{ };

[]struct[] []PITarget[] :
[]difference[]<
[]Name[],
[]sequence[]<
[]alternative[]< []string[]<[]'X'[]>, []string[]<[]'x'[]> >,
[]alternative[]< []string[]<[]'M'[]>, []string[]<[]'m'[]> >,
[]alternative[]< []string[]<[]'L'[]>, []string[]<[]'l'[]> >
>
>
{ };

[]struct[] []PI[] :
[]sequence[]<
[]string[]<[]'<'[],[]'?'[]>,
[]PITarget[],
[]optional[]<
[]sequence[]< []S[], []kleene_star_before[]< []Char[], []string[]<[]'?'[],[]'>'[]> > >
>,
[]string[]<[]'?'[],[]'>'[]>
>
{ };

[]struct[] []CDStart[] :
[]string[]<[]'<'[],[]'!'[],[]'['[],[]'C'[],[]'D'[],[]'A'[],[]'T'[],[]'A'[],[]'['[]>
{ };

[]struct[] []CData[] :
[]kleene_star_before[]< []Char[], []string[]<[]']'[],[]']'[],[]'>'[]> >
{ };

[]struct[] []CDEnd[] :
[]string[]<[]']'[],[]']'[],[]'>'[]>
{ };

[]struct[] []CDSect[] :
[]sequence[]< []CDStart[], []CData[], []CDEnd[] >
{ };

[]struct[] []doctypedecl[] :
[]sequence[]<
[]string[]<[]'<'[],[]'!'[],[]'D'[],[]'O'[],[]'C'[],[]'T'[],[]'Y'[],[]'P'[],[]'E'[]>,
[]kleene_star_until[]< []Char[], []string[]<[]'>'[]> >
>
{ };

[]struct[] []XMLDecl[] :
[]sequence[]<
[]string[]<[]'<'[],[]'?'[],[]'x'[],[]'m'[],[]'l'[]>,
[]kleene_star_until[]< []Char[], []string[]<[]'?'[],[]'>'[]> >
>
{ };

[]struct[] []Misc[] :
[]alternative[]< []Comment[], []PI[], []S[] >
{ };

[]struct[] []prolog[] :
[]sequence[]<
[]optional[]<[]XMLDecl[]>,
[]kleene_star[]<[]Misc[]>,
[]optional[]< []sequence[]< []doctypedecl[], []kleene_star[]<[]Misc[]> > >
>
{ };

[]struct[] []CharRef[] :
[]alternative[]<
[]sequence[]<
[]string[]<[]'&'[],[]'#'[]>,
[]positive[]< []char_range[]<[]'0'[],[]'9'[]> >,
[]string[]<[]';'[]>
>,
[]sequence[]<
[]string[]<[]'&'[],[]'#'[],[]'x'[]>,
[]positive[]< []alternative[]< []char_range[]<[]'0'[],[]'9'[]>, []char_range[]<[]'a'[],[]'f'[]>, []char_range[]<[]'A'[],[]'F'[]> > >,
[]string[]<[]';'[]>
>
>
{ };

[]struct[] []EntityRef[] :
[]sequence[]< []string[]<[]'&'[]>, []Name[], []string[]<[]';'[]> >
{ };

[]struct[] []Reference[] :
[]alternative[]<[]EntityRef[], []CharRef[]>
{ };

[]struct[] []AttValue[] :
[]alternative[]<
[]sequence[]<
[]string[]<[]'"'[]>,
[]kleene_star[]<
[]alternative[]<
[]complement[]< []char_set[]<[]'<'[],[]'&'[],[]'"'[]> >,
[]Reference[]
>
>,
[]string[]<[]'"'[]>
>,
[]sequence[]<
[]string[]<[]'\''[]>,
[]kleene_star[]<
[]alternative[]<
[]complement[]< []char_set[]<[]'<'[],[]'&'[],[]'\''[]> >,
[]Reference[]
>
>,
[]string[]<[]'\''[]>
>
>
{ };

[]struct[] []Attribute[] :
[]sequence[]< []Name[], []Eq[], []AttValue[] >
{ };

[]struct[] []EmptyElemTag[] :
[]sequence[]<
[]string[]<[]'<'[]>,
[]Name[],
[]kleene_star[]< []sequence[]<[]S[],[]Attribute[]> >,
[]optional[]<[]S[]>,
[]string[]<[]'/'[],[]'>'[]>
>
{ };

[]struct[] []STag[] :
[]sequence[]<
[]string[]<[]'<'[]>,
[]Name[],
[]kleene_star[]< []sequence[]<[]S[],[]Attribute[]> >,
[]optional[]<[]S[]>,
[]string[]<[]'>'[]>
>
{ };

[]struct[] []ETag[] :
[]sequence[]<
[]string[]<[]'<'[],[]'/'[]>,
[]Name[],
[]optional[]<[]S[]>,
[]string[]<[]'>'[]>
>
{ };

[]struct[] []element[];

[]struct[] []content[] :
[]sequence[]<
[]optional[]<[]CharData[]>,
[]kleene_star[]<
[]sequence[]<
[]alternative[]<
[]element[], []// the magical recursion![]
[]Reference[],
[]CDSect[],
[]PI[],
[]Comment[]
>,
[]optional[]<[]CharData[]>
>
>
>
{ };

[]struct[] []element[] :
[]alternative[]<
[]EmptyElemTag[],
[]sequence[]<[]STag[], []content[], []ETag[]>
>
{ };

[]struct[] []document[] :
[]sequence[]<
[]prolog[],
[]element[],
[]kleene_star[]<[]Misc[]>
>
{ };

} []// namespace[]

[]struct[] []output[]
{
[]template[]< []class[] []State[] >
[]void[] []operator[]()([]State[]& []state[])
{
[]std[]::[]wcout[] << []std[]::[]wstring[]([]state[].[]first[], []state[].[]last[]);
}
};

[]int[] []_tmain[]([]int[] []argc[], []_TCHAR[]* []argv[][])
{
([]argv[]); ([]argc[]);

[]std[]::[]wifstream[] []fin[]([]"test.xml"[]);
[]std[]::[]wstring[] []document_text[];
[]std[]::[]getline[]([]fin[], []document_text[], []L[][]'\0'[]);
[]typedef[] []biscuit[]::[]action[]<[]document[], []output[]> []document_parser[];

[]biscuit[]::[]state_type[]<[]std[]::[]wstring[]::[]iterator[]> []state[]([]document_text[].[]begin[](), []document_text[].[]end[]());
[]if[] (![]biscuit[]::[]match[]<[]document_parser[]>([]state[])) {
[]std[]::[]cout[] << []"no match..."[] << []std[]::[]endl[];
}
[]std[]::[]cin[].[]ignore[]();
[]return[] 0;
}