~ubuntu-branches/debian/squeeze/erlang/squeeze

« back to all changes in this revision

Viewing changes to lib/parsetools/include/yeccpre.hrl

  • Committer: Bazaar Package Importer
  • Author(s): Erlang Packagers, Sergei Golovan
  • Date: 2006-12-03 17:07:44 UTC
  • mfrom: (2.1.11 feisty)
  • Revision ID: james.westby@ubuntu.com-20061203170744-rghjwupacqlzs6kv
Tags: 1:11.b.2-4
[ Sergei Golovan ]
Fixed erlang-base and erlang-base-hipe prerm scripts.

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
14
14
%% AB. All Rights Reserved.''
15
15
%% 
16
 
%%     $Id$
 
16
%%     $Id $
17
17
%%
18
18
 
19
19
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
20
20
% The parser generator will insert appropriate declarations before this line.%
21
21
 
22
22
parse(Tokens) ->
23
 
    case catch yeccpars1(Tokens, false, 0, [], []) of
24
 
        error ->
25
 
            Errorline =
26
 
                if Tokens == [] -> 0; true -> element(2, hd(Tokens)) end,
27
 
            {error,
28
 
             {Errorline, ?THIS_MODULE, "syntax error at or after this line."}};
29
 
        Other ->
30
 
            Other
31
 
    end.
 
23
    yeccpars0(Tokens, false).
32
24
 
33
 
parse_and_scan({Mod, Fun, Args}) ->
34
 
    case apply(Mod, Fun, Args) of
35
 
        {eof, _} ->
36
 
            {ok, eof};
37
 
        {error, Descriptor, _} ->
38
 
            {error, Descriptor};
39
 
        {ok, Tokens, _} ->
40
 
            yeccpars1(Tokens, {Mod, Fun, Args}, 0, [], [])
41
 
    end.
 
25
parse_and_scan({F, A}) -> % Fun or {M, F}
 
26
    yeccpars0([], {F, A});
 
27
parse_and_scan({M, F, A}) ->
 
28
    yeccpars0([], {{M, F}, A}).
42
29
 
43
30
format_error(Message) ->
44
31
    case io_lib:deep_char_list(Message) of
48
35
            io_lib:write(Message)
49
36
    end.
50
37
 
51
 
% To be used in grammar files to throw an error message to the parser toplevel.
52
 
% Doesn't have to be exported!
 
38
% To be used in grammar files to throw an error message to the parser
 
39
% toplevel. Doesn't have to be exported!
 
40
-compile({nowarn_unused_function,{return_error,2}}).
53
41
return_error(Line, Message) ->
54
 
    throw({error, {Line, ?THIS_MODULE, Message}}).
 
42
    throw({error, {Line, ?MODULE, Message}}).
55
43
 
 
44
yeccpars0(Tokens, MFA) ->
 
45
    try yeccpars1(Tokens, MFA, 0, [], [])
 
46
    catch 
 
47
        throw: {error, {_Line, ?MODULE, _M}} = Error -> 
 
48
                   Error % probably from return_error/1
 
49
    end.
56
50
 
57
51
% Don't change yeccpars1/6 too much, it is called recursively by yeccpars2/8!
58
52
yeccpars1([Token | Tokens], Tokenizer, State, States, Vstack) ->
59
53
    yeccpars2(State, element(1, Token), States, Vstack, Token, Tokens,
60
54
              Tokenizer);
61
 
yeccpars1([], {M, F, A}, State, States, Vstack) ->
62
 
    case catch apply(M, F, A) of
63
 
        {eof, Endline} ->
64
 
            {error, {Endline, ?THIS_MODULE, "end_of_file"}};
 
55
yeccpars1([], {F, A}, State, States, Vstack) ->
 
56
    case apply(F, A) of
 
57
        {ok, Tokens, _Endline} ->
 
58
            yeccpars1(Tokens, {F, A}, State, States, Vstack);
 
59
        {eof, _Endline} ->
 
60
            yeccpars1([], false, State, States, Vstack);
65
61
        {error, Descriptor, _Endline} ->
66
 
            {error, Descriptor};
67
 
        {'EXIT', Reason} ->
68
 
            {error, {0, ?THIS_MODULE, Reason}};
69
 
        {ok, Tokens, _Endline} ->
70
 
            case catch yeccpars1(Tokens, {M, F, A}, State, States, Vstack) of
71
 
                error ->
72
 
                    Errorline = element(2, hd(Tokens)),
73
 
                    {error, {Errorline, ?THIS_MODULE,
74
 
                             "syntax error at or after this line."}};
75
 
                Other ->
76
 
                    Other
77
 
            end
 
62
            {error, Descriptor}
78
63
    end;
79
64
yeccpars1([], false, State, States, Vstack) ->
80
65
    yeccpars2(State, '$end', States, Vstack, {'$end', 999999}, [], false).
82
67
% For internal use only.
83
68
yeccerror(Token) ->
84
69
    {error,
85
 
     {element(2, Token), ?THIS_MODULE,
 
70
     {element(2, Token), ?MODULE,
86
71
      ["syntax error before: ", yecctoken2string(Token)]}}.
87
72
 
88
73
yecctoken2string({atom, _, A}) -> io_lib:write(A);
93
78
yecctoken2string({string,_,S}) -> io_lib:write_string(S);
94
79
yecctoken2string({reserved_symbol, _, A}) -> io_lib:format('~w', [A]);
95
80
yecctoken2string({_Cat, _, Val}) -> io_lib:format('~w', [Val]);
96
 
 
97
81
yecctoken2string({'dot', _}) -> io_lib:format('~w', ['.']);
98
82
yecctoken2string({'$end', _}) ->
99
83
    [];
100
 
yecctoken2string({Other, _}) when atom(Other) ->
 
84
yecctoken2string({Other, _}) when is_atom(Other) ->
101
85
    io_lib:format('~w', [Other]);
102
86
yecctoken2string(Other) ->
103
87
    io_lib:write(Other).
104
88
 
105
89
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
106
90
 
 
91