Current section
Files
Jump to
Current section
Files
src/abnfc_rfc4234.erl
%% Do not modify this file, it is automatically
%% generated by abnfc. All changes will be lost
%% when it is regenerated.
%% Generated by abnfc_gen on 2009-02-24 17:14:16
-module(abnfc_rfc4234).
-export([]).
-compile(export_all).
-include("abnfc_rfc4234.hrl").
rulelist() ->
fun (T) ->
__P = '__repeat'(1, infinity,
'__alt'([rule(),
'__seq'(['__repeat'(0, infinity,
'c-wsp'()),
'c-nl'()])])),
case __P(T) of
{ok, _YY, __Rest} ->
__Ret = begin
#rulelist{rules =
[Rule || Rule <- _YY, is_tuple(Rule)]}
end,
{ok, __Ret, __Rest};
fail -> fail
end
end.
rulelist_dec(Str) -> (rulelist())(Str).
rule() ->
fun (T) ->
__P = '__seq'([rulename(), 'defined-as'(), elements(),
fun (Str) ->
case ('__seq'(['__repeat'(0, infinity,
'WSP'()),
fun ([C | Tl]) when C == 58 ->
{ok, C, Tl};
(_) -> fail
end,
'__repeat'(0, infinity,
'WSP'()),
erlangcode()]))(Str)
of
fail -> {ok, [], Str};
{ok, _Res, _Tail} -> {ok, [_Res], _Tail}
end
end,
'c-nl'()]),
case __P(T) of
{ok, [_YY1, _YY2, _YY3, _YY4, _YY5] = _YY, __Rest} ->
__Ret = begin
#rule{type = _YY2, name = element(2, _YY1),
body = _YY3,
code =
case _YY4 of
[[_, _, _, Code]] -> Code;
[] -> nocode
end}
end,
{ok, __Ret, __Rest};
fail -> fail
end
end.
rule_dec(Str) -> (rule())(Str).
rulename() ->
fun (T) ->
__P = '__seq'(['ALPHA'(),
'__repeat'(0, infinity,
'__alt'([fun ([C1 | Tl]) when C1 == 45 ->
{ok, C1, Tl};
(_) -> fail
end,
'ALPHA'(), 'DIGIT'()]))]),
case __P(T) of
{ok, [_YY1, _YY2] = _YY, __Rest} ->
__Ret = begin
#rulename{name = list_to_atom(lists:flatten(_YY))}
end,
{ok, __Ret, __Rest};
fail -> fail
end
end.
rulename_dec(Str) -> (rulename())(Str).
'defined-as'() ->
fun (T) ->
__P = '__seq'(['__repeat'(0, infinity, 'c-wsp'()),
'__alt'([fun ([C1 | Tl]) when C1 == 61 ->
{ok, C1, Tl};
(_) -> fail
end,
fun ([C1, C2 | Tl])
when C1 == 61, C2 == 47 ->
{ok, [C1, C2], Tl};
(_) -> fail
end]),
'__repeat'(0, infinity, 'c-wsp'())]),
case __P(T) of
{ok, [_YY1, _YY2, _YY3] = _YY, __Rest} ->
__Ret = begin
case _YY2 of
61 -> def_rule;
_ -> app_rule
end
end,
{ok, __Ret, __Rest};
fail -> fail
end
end.
'defined-as_dec'(Str) -> ('defined-as'())(Str).
elements() ->
fun (T) ->
__P = '__seq'([alternation(),
'__repeat'(0, infinity, 'c-wsp'())]),
case __P(T) of
{ok, [_YY1, _YY2] = _YY, __Rest} ->
__Ret = begin _YY1 end, {ok, __Ret, __Rest};
fail -> fail
end
end.
elements_dec(Str) -> (elements())(Str).
'c-wsp'() ->
fun (T) ->
__P = '__alt'(['WSP'(), '__seq'(['c-nl'(), 'WSP'()])]),
case __P(T) of
{ok, _YY, __Rest} ->
__Ret = begin 'c-wsp' end, {ok, __Ret, __Rest};
fail -> fail
end
end.
'c-wsp_dec'(Str) -> ('c-wsp'())(Str).
'c-nl'() ->
fun (T) ->
__P = '__alt'([comment(), 'CRLF'()]),
case __P(T) of
{ok, _YY, __Rest} ->
__Ret = begin 'c-nl' end, {ok, __Ret, __Rest};
fail -> fail
end
end.
'c-nl_dec'(Str) -> ('c-nl'())(Str).
comment() ->
fun (T) ->
__P = '__seq'([fun ([C | Tl]) when C == 59 ->
{ok, C, Tl};
(_) -> fail
end,
'__repeat'(0, infinity,
'__alt'(['WSP'(), 'VCHAR'()])),
'CRLF'()]),
case __P(T) of
{ok, [_YY1, _YY2, _YY3] = _YY, __Rest} ->
__Ret = begin comment end, {ok, __Ret, __Rest};
fail -> fail
end
end.
comment_dec(Str) -> (comment())(Str).
alternation() ->
fun (T) ->
__P = '__seq'([concatenation(),
'__repeat'(0, infinity,
'__seq'(['__repeat'(0, infinity,
'c-wsp'()),
fun ([C | Tl]) when C == 47 ->
{ok, C, Tl};
(_) -> fail
end,
'__repeat'(0, infinity,
'c-wsp'()),
concatenation()]))]),
case __P(T) of
{ok, [_YY1, _YY2] = _YY, __Rest} ->
__Ret = begin
case [Alt || [_, _, _, Alt] <- _YY2] of
[] -> _YY1;
Alts -> #alt{alts = [_YY1 | Alts]}
end
end,
{ok, __Ret, __Rest};
fail -> fail
end
end.
alternation_dec(Str) -> (alternation())(Str).
concatenation() ->
fun (T) ->
__P = '__seq'([repetition(),
'__repeat'(0, infinity,
'__seq'(['__repeat'(1, infinity,
'c-wsp'()),
repetition()]))]),
case __P(T) of
{ok, [_YY1, _YY2] = _YY, __Rest} ->
__Ret = begin
case [Rule || [_, Rule] <- _YY2] of
[] -> _YY1;
More -> #seq{elements = [_YY1 | More]}
end
end,
{ok, __Ret, __Rest};
fail -> fail
end
end.
concatenation_dec(Str) -> (concatenation())(Str).
repetition() ->
fun (T) ->
__P = '__seq'([fun (Str) ->
case (repeat())(Str) of
fail -> {ok, [], Str};
{ok, _Res, _Tail} -> {ok, [_Res], _Tail}
end
end,
element()]),
case __P(T) of
{ok, [_YY1, _YY2] = _YY, __Rest} ->
__Ret = begin
case _YY1 of
[{Min, Max}] ->
#repeat{min = Min, max = Max, body = _YY2};
[] -> _YY2
end
end,
{ok, __Ret, __Rest};
fail -> fail
end
end.
repetition_dec(Str) -> (repetition())(Str).
repeat() ->
fun (T) ->
__P = '__alt'(['__seq'(['__repeat'(0, infinity,
'DIGIT'()),
fun ([C | Tl]) when C == 42 -> {ok, C, Tl};
(_) -> fail
end,
'__repeat'(0, infinity, 'DIGIT'())]),
'__repeat'(1, infinity, 'DIGIT'())]),
case __P(T) of
{ok, _YY, __Rest} ->
__Ret = begin
case _YY of
[[], 42, []] -> {0, infinity};
[Min, 42, []] -> {list_to_integer(Min), infinity};
[[], 42, Max] -> {0, list_to_integer(Max)};
[Min, 42, Max] ->
{list_to_integer(Min), list_to_integer(Max)};
Number ->
{list_to_integer(Number),
list_to_integer(Number)}
end
end,
{ok, __Ret, __Rest};
fail -> fail
end
end.
repeat_dec(Str) -> (repeat())(Str).
element() ->
fun (T) ->
__P = '__alt'([rulename(), group(), option(),
'char-val'(), 'num-val'(), 'prose-val'()]),
__P(T)
end.
element_dec(Str) -> (element())(Str).
group() ->
fun (T) ->
__P = '__seq'([fun ([C | Tl]) when C == 40 ->
{ok, C, Tl};
(_) -> fail
end,
'__repeat'(0, infinity, 'c-wsp'()), alternation(),
'__repeat'(0, infinity, 'c-wsp'()),
fun ([C | Tl]) when C == 41 -> {ok, C, Tl};
(_) -> fail
end]),
case __P(T) of
{ok, [_YY1, _YY2, _YY3, _YY4, _YY5] = _YY, __Rest} ->
__Ret = begin _YY3 end, {ok, __Ret, __Rest};
fail -> fail
end
end.
group_dec(Str) -> (group())(Str).
option() ->
fun (T) ->
__P = '__seq'([fun ([C | Tl]) when C == 91 ->
{ok, C, Tl};
(_) -> fail
end,
'__repeat'(0, infinity, 'c-wsp'()), alternation(),
'__repeat'(0, infinity, 'c-wsp'()),
fun ([C | Tl]) when C == 93 -> {ok, C, Tl};
(_) -> fail
end]),
case __P(T) of
{ok, [_YY1, _YY2, _YY3, _YY4, _YY5] = _YY, __Rest} ->
__Ret = begin {repeat, 0, 1, _YY3} end,
{ok, __Ret, __Rest};
fail -> fail
end
end.
option_dec(Str) -> (option())(Str).
'char-val'() ->
fun (T) ->
__P = '__seq'(['DQUOTE'(),
'__repeat'(0, infinity,
fun ([C1 | Tl])
when (C1 >= 32) and (C1 =< 33) or
(C1 >= 35) and
(C1 =< 126) ->
{ok, C1, Tl};
(_) -> fail
end),
'DQUOTE'()]),
case __P(T) of
{ok, [_YY1, _YY2, _YY3] = _YY, __Rest} ->
__Ret = begin
F = fun (Char) ->
case {string:to_lower(Char),
string:to_upper(Char)}
of
{Char, Char} ->
#char_val{value = Char};
{Low, Up} ->
#char_alt{alts =
[#char_val{value =
Low},
#char_val{value =
Up}]}
end
end,
case _YY2 of
[C] -> F(C);
Chars ->
#char_seq{elements = [F(C) || C <- Chars]}
end
end,
{ok, __Ret, __Rest};
fail -> fail
end
end.
'char-val_dec'(Str) -> ('char-val'())(Str).
'num-val'() ->
fun (T) ->
__P = '__seq'([fun ([C | Tl]) when C == 37 ->
{ok, C, Tl};
(_) -> fail
end,
'__alt'(['bin-val'(), 'dec-val'(), 'hex-val'()])]),
case __P(T) of
{ok, [_YY1, _YY2] = _YY, __Rest} ->
__Ret = begin _YY2 end, {ok, __Ret, __Rest};
fail -> fail
end
end.
'num-val_dec'(Str) -> ('num-val'())(Str).
'bin-val'() ->
fun (T) ->
__P = '__seq'([fun ([C1 | Tl])
when (C1 == 98) or (C1 == 66) ->
{ok, C1, Tl};
(_) -> fail
end,
'__repeat'(1, infinity, 'BIT'()),
fun (Str) ->
case ('__alt'(['__repeat'(1, infinity,
'__seq'([fun ([C
| Tl])
when
C
==
46 ->
{ok,
C,
Tl};
(_) ->
fail
end,
'__repeat'(1,
infinity,
'BIT'())])),
'__seq'([fun ([C | Tl])
when C ==
45 ->
{ok, C, Tl};
(_) -> fail
end,
'__repeat'(1,
infinity,
'BIT'())])]))(Str)
of
fail -> {ok, [], Str};
{ok, _Res, _Tail} -> {ok, [_Res], _Tail}
end
end]),
case __P(T) of
{ok, [_YY1, _YY2, _YY3] = _YY, __Rest} ->
__Ret = begin
First = bin_to_int(_YY2),
case _YY3 of
[] -> #char_val{value = First};
[[45, To]] ->
#char_range{from = First,
to = bin_to_int(To)};
[Vals] ->
#char_seq{elements =
[#char_val{value = First}
| [#char_val{value =
bin_to_int(Val)}
|| [46, Val] <- Vals]]}
end
end,
{ok, __Ret, __Rest};
fail -> fail
end
end.
'bin-val_dec'(Str) -> ('bin-val'())(Str).
'dec-val'() ->
fun (T) ->
__P = '__seq'([fun ([C1 | Tl])
when (C1 == 100) or (C1 == 68) ->
{ok, C1, Tl};
(_) -> fail
end,
'__repeat'(1, infinity, 'DIGIT'()),
fun (Str) ->
case ('__alt'(['__repeat'(1, infinity,
'__seq'([fun ([C
| Tl])
when
C
==
46 ->
{ok,
C,
Tl};
(_) ->
fail
end,
'__repeat'(1,
infinity,
'DIGIT'())])),
'__seq'([fun ([C | Tl])
when C ==
45 ->
{ok, C, Tl};
(_) -> fail
end,
'__repeat'(1,
infinity,
'DIGIT'())])]))(Str)
of
fail -> {ok, [], Str};
{ok, _Res, _Tail} -> {ok, [_Res], _Tail}
end
end]),
case __P(T) of
{ok, [_YY1, _YY2, _YY3] = _YY, __Rest} ->
__Ret = begin
First = list_to_integer(_YY2),
case _YY3 of
[] -> #char_val{value = First};
[[45, To]] ->
#char_range{from = First,
to = list_to_integer(To)};
[Vals] ->
#char_seq{elements =
[#char_val{value = First}
| [#char_val{value =
list_to_integer(Val)}
|| [46, Val] <- Vals]]}
end
end,
{ok, __Ret, __Rest};
fail -> fail
end
end.
'dec-val_dec'(Str) -> ('dec-val'())(Str).
'hex-val'() ->
fun (T) ->
__P = '__seq'([fun ([C1 | Tl])
when (C1 == 120) or (C1 == 88) ->
{ok, C1, Tl};
(_) -> fail
end,
'__repeat'(1, infinity, 'HEXDIG'()),
fun (Str) ->
case ('__alt'(['__repeat'(1, infinity,
'__seq'([fun ([C
| Tl])
when
C
==
46 ->
{ok,
C,
Tl};
(_) ->
fail
end,
'__repeat'(1,
infinity,
'HEXDIG'())])),
'__seq'([fun ([C | Tl])
when C ==
45 ->
{ok, C, Tl};
(_) -> fail
end,
'__repeat'(1,
infinity,
'HEXDIG'())])]))(Str)
of
fail -> {ok, [], Str};
{ok, _Res, _Tail} -> {ok, [_Res], _Tail}
end
end]),
case __P(T) of
{ok, [_YY1, _YY2, _YY3] = _YY, __Rest} ->
__Ret = begin
First = hex_to_int(_YY2),
case _YY3 of
[] -> #char_val{value = First};
[[45, To]] ->
#char_range{from = First,
to = hex_to_int(To)};
[Vals] ->
#char_seq{elements =
[#char_val{value = First}
| [#char_val{value =
hex_to_int(Val)}
|| [46, Val] <- Vals]]}
end
end,
{ok, __Ret, __Rest};
fail -> fail
end
end.
'hex-val_dec'(Str) -> ('hex-val'())(Str).
'prose-val'() ->
fun (T) ->
__P = '__seq'([fun ([C | Tl]) when C == 60 ->
{ok, C, Tl};
(_) -> fail
end,
'__repeat'(0, infinity,
fun ([C1 | Tl])
when (C1 >= 32) and (C1 =< 61) or
(C1 >= 63) and
(C1 =< 126) ->
{ok, C1, Tl};
(_) -> fail
end),
fun ([C | Tl]) when C == 62 -> {ok, C, Tl};
(_) -> fail
end]),
case __P(T) of
{ok, [_YY1, _YY2, _YY3] = _YY, __Rest} ->
__Ret = begin {'prose-val', lists:flatten(_YY2)} end,
{ok, __Ret, __Rest};
fail -> fail
end
end.
'prose-val_dec'(Str) -> ('prose-val'())(Str).
'__alt'([P | Ps]) ->
fun (T) ->
case P(T) of
{ok, R, T1} -> {ok, R, T1};
fail ->
case Ps of
[] -> fail;
_ -> ('__alt'(Ps))(T)
end
end
end.
'__repeat'(Min, Max, P) -> '__repeat'(Min, Max, P, 0).
'__repeat'(Min, Max, P, Found) ->
fun (T) ->
case P(T) of
{ok, R1, T1} when Max == Found + 1 -> {ok, [R1], T1};
{ok, R1, T1} ->
case ('__repeat'(Min, Max, P, Found + 1))(T1) of
{ok, R2, T2} -> {ok, [R1 | R2], T2};
fail when Found >= Min -> {ok, [R1], T1};
fail -> fail
end;
fail when Found >= Min -> {ok, [], T};
fail -> fail
end
end.
'__seq'([P | Ps]) ->
fun (T) ->
case P(T) of
{ok, R1, T1} ->
case ('__seq'(Ps))(T1) of
{ok, R2, T2} -> {ok, [R1 | R2], T2};
fail -> fail
end;
fail -> fail
end
end;
'__seq'([]) -> fun (T) -> {ok, [], T} end.