mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-07 15:50:36 +02:00
--- Merging r29502 into '.':
U utils/tply/pyacc.y --- Merging r29503 into '.': U utils/tply/lexbase.pas G utils/tply/pyacc.y U utils/tply/pyacc.pas U utils/tply/plex.pas U utils/tply/yaccbase.pas --- Merging r30289 into '.': U utils/tply/README.txt # revisions: 29502,29503,30289 git-svn-id: branches/fixes_3_0@30825 -
This commit is contained in:
parent
51389e4f3d
commit
9bb8c2f400
@ -16,7 +16,7 @@ available from the TPLY homepage:
|
||||
|
||||
For information about the Free Pascal Compiler, please refer to:
|
||||
|
||||
http://tfdec1.fys.kuleuven.ac.be/~michael/fpc/fpc.html
|
||||
http://www.freepascal.org/
|
||||
|
||||
The manual can be found in the files tply.tex (TeX version) and tply.doc
|
||||
(ASCII version) contained in the package. An extended version of the manual
|
||||
@ -44,7 +44,7 @@ The original version of the TPLY package was written by Albert Graef
|
||||
4.0-6.0. Berend de Boer <berend@pobox.com>, the current maintainer of the
|
||||
Turbo/Borland Pascal version, adapted TPLY to take advantage of the large
|
||||
memory models in Borland Pascal 7.0 and Delphi. Michael Van Canneyt
|
||||
<Michael.VanCanneyt@fys.kuleuven.ac.be>, who maintains the Linux version of
|
||||
<michael@freepascal.org>, who maintains the Linux version of
|
||||
the Free Pascal compiler, is the author of the Free Pascal port.
|
||||
|
||||
|
||||
@ -77,10 +77,9 @@ to store things :-) The 16-bit DPMI platforms have tables extended as large as
|
||||
possible without changing basic Lex or Yacc sources.
|
||||
|
||||
This version was ported to Free Pascal by Michael Van Canneyt
|
||||
<Michael.VanCanneyt@fys.kuleuven.ac.be> (April 1998).
|
||||
<michael@freepascal.org> (April 1998).
|
||||
|
||||
*** Version 4.1 Michael Van Canneyt
|
||||
<Michael.VanCanneyt@fys.kuleuven.ac.be>
|
||||
*** Version 4.1 Michael Van Canneyt <michael@freepascal.org>
|
||||
Albert Graef <ag@muwiinfa.geschichte.uni-mainz.de>
|
||||
|
||||
May 1998. Merges the Turbo and Free Pascal versions into a single package.
|
||||
@ -142,6 +141,18 @@ from the lex.pas and yacc.pas programs), the Lex and Yacc code templates
|
||||
(*.cod files), and the LexLib and YaccLib library units (compiled from
|
||||
lexlib.pas and yacclib.pas).
|
||||
|
||||
The plex and pyacc programs will look for the *.cod files in the following locations:
|
||||
For unix-like operating systems:
|
||||
1. Current directory.
|
||||
2. Directory given by FPCDIR
|
||||
3. Directory /usr/local/lib/fpc/lexyacc
|
||||
4. Directory /usr/lib/fpc/lexyacc
|
||||
|
||||
For other operating systems (dos/windows-like) :
|
||||
1. Current directory.
|
||||
2. Directory given by FPCDIR
|
||||
3. Directory where the executable is located.
|
||||
|
||||
For the Free Pascal/Linux version, a Makefile is provided. To install, issue
|
||||
the command `make' (maybe you have to edit the Makefile before this to reflect
|
||||
your setup) and then `make install'. Note that in the Linux version the
|
||||
|
@ -65,7 +65,8 @@ lfilename : String;
|
||||
pasfilename : String;
|
||||
lstfilename : String;
|
||||
codfilename : String;
|
||||
codfilepath : String; { Under linux, binary and conf file
|
||||
codfilepath1,
|
||||
codfilepath2 : String; { Under linux, binary and conf file
|
||||
are not in the same path}
|
||||
|
||||
(* Lex input, output, list and code template file: *)
|
||||
|
@ -62,7 +62,7 @@ $History: LEX.PAS $
|
||||
program Lex;
|
||||
|
||||
uses
|
||||
LexBase, LexTable, LexPos, LexDFA, LexOpt, LexList, LexRules, LexMsgs;
|
||||
LexBase, LexTable, LexPos, LexDFA, LexOpt, LexList, LexRules, LexMsgs, SysUtils;
|
||||
|
||||
|
||||
procedure get_line;
|
||||
@ -597,15 +597,14 @@ var i : Integer;
|
||||
|
||||
begin
|
||||
{$ifdef Unix}
|
||||
{$ifdef BSD}
|
||||
codfilepath:='/usr/local/lib/fpc/lexyacc/';
|
||||
{$else}
|
||||
codfilepath:='/usr/lib/fpc/lexyacc/';
|
||||
{$endif}
|
||||
codfilepath1:='/usr/local/lib/fpc/lexyacc/';
|
||||
codfilepath2:='/usr/lib/fpc/lexyacc/';
|
||||
{$else}
|
||||
codfilepath:=path(paramstr(0));
|
||||
codfilepath1:=path(paramstr(0));
|
||||
codfilepath2:='';
|
||||
{$endif}
|
||||
|
||||
|
||||
(* sign-on: *)
|
||||
|
||||
writeln(sign_on);
|
||||
@ -662,17 +661,29 @@ begin
|
||||
rewrite(yyout); if ioresult<>0 then fatal(cannot_open_file+pasfilename);
|
||||
rewrite(yylst); if ioresult<>0 then fatal(cannot_open_file+lstfilename);
|
||||
|
||||
(* search code template in current directory, then on path where Lex
|
||||
was executed from: *)
|
||||
(* search code template *)
|
||||
codfilename := 'yylex.cod';
|
||||
assign(yycod, codfilename);
|
||||
reset(yycod);
|
||||
if ioresult<>0 then
|
||||
begin
|
||||
codfilename := codfilepath+'yylex.cod';
|
||||
codfilename := IncludeTrailingPathDelimiter(GetEnvironmentVariable('FPCDIR'))+'lexyacc'+DirectorySeparator+'yylex.cod';
|
||||
assign(yycod, codfilename);
|
||||
reset(yycod);
|
||||
if ioresult<>0 then fatal(cannot_open_file+codfilename);
|
||||
if ioresult<>0 then
|
||||
begin
|
||||
codfilename := codfilepath1+'yylex.cod';
|
||||
assign(yycod, codfilename);
|
||||
reset(yycod);
|
||||
if (codfilepath2<>'') and (ioresult<>0) then
|
||||
begin
|
||||
codfilename := codfilepath2+'yylex.cod';
|
||||
assign(yycod, codfilename);
|
||||
reset(yycod);
|
||||
if ioresult<>0 then
|
||||
fatal(cannot_open_file+codfilename);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
(* parse source grammar: *)
|
||||
|
@ -36,7 +36,7 @@ Last changes:
|
||||
updates)
|
||||
|
||||
$History: YACC.PAS $
|
||||
*
|
||||
*
|
||||
* ***************** Version 2 *****************
|
||||
* User: Berend Date: 96-10-10 Time: 21:16
|
||||
* Updated in $/Lex and Yacc/tply
|
||||
@ -110,7 +110,7 @@ uses
|
||||
YaccChk source not available anymore PM }
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
YaccLib, YaccBase, YaccMsgs, YaccSem, YaccTabl, YaccPars;
|
||||
YaccLib, YaccBase, YaccMsgs, YaccSem, YaccTabl, YaccPars, SysUtils;
|
||||
|
||||
const ID = 257;
|
||||
const C_ID = 258;
|
||||
@ -161,28 +161,28 @@ begin
|
||||
yyval := yyv[yysp-0];
|
||||
end;
|
||||
6 : begin
|
||||
yyerrok;
|
||||
yyerrok;
|
||||
end;
|
||||
7 : begin
|
||||
yyerrok;
|
||||
yyerrok;
|
||||
end;
|
||||
8 : begin
|
||||
yyerrok;
|
||||
yyerrok;
|
||||
end;
|
||||
9 : begin
|
||||
yyerrok;
|
||||
yyerrok;
|
||||
end;
|
||||
10 : begin
|
||||
yyerrok;
|
||||
yyerrok;
|
||||
end;
|
||||
11 : begin
|
||||
yyerrok;
|
||||
yyerrok;
|
||||
end;
|
||||
12 : begin
|
||||
yyval := yyv[yysp-0];
|
||||
end;
|
||||
13 : begin
|
||||
yyerrok;
|
||||
yyerrok;
|
||||
end;
|
||||
14 : begin
|
||||
yyval := yyv[yysp-0];
|
||||
@ -191,19 +191,19 @@ begin
|
||||
yyval := yyv[yysp-0];
|
||||
end;
|
||||
16 : begin
|
||||
error(rcurl_expected);
|
||||
error(rcurl_expected);
|
||||
end;
|
||||
17 : begin
|
||||
yyval := yyv[yysp-0];
|
||||
end;
|
||||
18 : begin
|
||||
yyerrok;
|
||||
yyerrok;
|
||||
end;
|
||||
19 : begin
|
||||
yyerrok;
|
||||
yyerrok;
|
||||
end;
|
||||
20 : begin
|
||||
yyerrok;
|
||||
yyerrok;
|
||||
end;
|
||||
21 : begin
|
||||
yyval := yyv[yysp-0];
|
||||
@ -212,7 +212,7 @@ begin
|
||||
yyval := yyv[yysp-0];
|
||||
end;
|
||||
23 : begin
|
||||
error(rbrace_expected);
|
||||
error(rbrace_expected);
|
||||
end;
|
||||
24 : begin
|
||||
yyval := yyv[yysp-0];
|
||||
@ -221,7 +221,7 @@ begin
|
||||
yyval := yyv[yysp-0];
|
||||
end;
|
||||
26 : begin
|
||||
error(rangle_expected);
|
||||
error(rangle_expected);
|
||||
end;
|
||||
27 : begin
|
||||
yyval := yyv[yysp-0];
|
||||
@ -229,12 +229,12 @@ begin
|
||||
28 : begin
|
||||
sort_types;
|
||||
definitions;
|
||||
next_section;
|
||||
next_section;
|
||||
end;
|
||||
29 : begin
|
||||
next_section;
|
||||
generate_parser;
|
||||
next_section;
|
||||
next_section;
|
||||
end;
|
||||
30 : begin
|
||||
yyval := yyv[yysp-5];
|
||||
@ -242,48 +242,48 @@ begin
|
||||
31 : begin
|
||||
end;
|
||||
32 : begin
|
||||
copy_rest_of_file;
|
||||
copy_rest_of_file;
|
||||
end;
|
||||
33 : begin
|
||||
end;
|
||||
34 : begin
|
||||
yyerrok;
|
||||
yyerrok;
|
||||
end;
|
||||
35 : begin
|
||||
error(error_in_def);
|
||||
error(error_in_def);
|
||||
end;
|
||||
36 : begin
|
||||
startnt := ntsym(yyv[yysp-0]);
|
||||
startnt := ntsym(yyv[yysp-0]);
|
||||
end;
|
||||
37 : begin
|
||||
error(ident_expected);
|
||||
error(ident_expected);
|
||||
end;
|
||||
38 : begin
|
||||
copy_code;
|
||||
copy_code;
|
||||
end;
|
||||
39 : begin
|
||||
yyval := yyv[yysp-2];
|
||||
end;
|
||||
40 : begin
|
||||
act_prec := 0;
|
||||
act_prec := 0;
|
||||
end;
|
||||
41 : begin
|
||||
yyval := yyv[yysp-3];
|
||||
end;
|
||||
42 : begin
|
||||
act_prec := new_prec_level(left);
|
||||
act_prec := new_prec_level(left);
|
||||
end;
|
||||
43 : begin
|
||||
yyval := yyv[yysp-3];
|
||||
end;
|
||||
44 : begin
|
||||
act_prec := new_prec_level(right);
|
||||
act_prec := new_prec_level(right);
|
||||
end;
|
||||
45 : begin
|
||||
yyval := yyv[yysp-3];
|
||||
end;
|
||||
46 : begin
|
||||
act_prec := new_prec_level(nonassoc);
|
||||
act_prec := new_prec_level(nonassoc);
|
||||
end;
|
||||
47 : begin
|
||||
yyval := yyv[yysp-3];
|
||||
@ -295,169 +295,169 @@ begin
|
||||
yyval := yyv[yysp-1];
|
||||
end;
|
||||
50 : begin
|
||||
act_type := 0;
|
||||
act_type := 0;
|
||||
end;
|
||||
51 : begin
|
||||
act_type := yyv[yysp-1]; add_type(yyv[yysp-1]);
|
||||
act_type := yyv[yysp-1]; add_type(yyv[yysp-1]);
|
||||
end;
|
||||
52 : begin
|
||||
yyval := yyv[yysp-0];
|
||||
end;
|
||||
53 : begin
|
||||
yyerrok;
|
||||
yyerrok;
|
||||
end;
|
||||
54 : begin
|
||||
yyerrok;
|
||||
yyerrok;
|
||||
end;
|
||||
55 : begin
|
||||
error(ident_expected);
|
||||
error(ident_expected);
|
||||
end;
|
||||
56 : begin
|
||||
error(error_in_def);
|
||||
error(error_in_def);
|
||||
end;
|
||||
57 : begin
|
||||
error(ident_expected);
|
||||
error(ident_expected);
|
||||
end;
|
||||
58 : begin
|
||||
if act_type<>0 then
|
||||
sym_type^[yyv[yysp-0]] := act_type;
|
||||
if act_prec<>0 then
|
||||
sym_prec^[yyv[yysp-0]] := act_prec;
|
||||
sym_prec^[yyv[yysp-0]] := act_prec;
|
||||
end;
|
||||
59 : begin
|
||||
litsym(yyv[yysp-0], 0);
|
||||
if act_type<>0 then
|
||||
sym_type^[litsym(yyv[yysp-0], 0)] := act_type;
|
||||
if act_prec<>0 then
|
||||
sym_prec^[litsym(yyv[yysp-0], 0)] := act_prec;
|
||||
sym_prec^[litsym(yyv[yysp-0], 0)] := act_prec;
|
||||
end;
|
||||
60 : begin
|
||||
litsym(yyv[yysp-0], 0);
|
||||
if act_type<>0 then
|
||||
sym_type^[litsym(yyv[yysp-0], 0)] := act_type;
|
||||
if act_prec<>0 then
|
||||
sym_prec^[litsym(yyv[yysp-0], 0)] := act_prec;
|
||||
sym_prec^[litsym(yyv[yysp-0], 0)] := act_prec;
|
||||
end;
|
||||
61 : begin
|
||||
litsym(yyv[yysp-1], 0);
|
||||
if act_type<>0 then
|
||||
sym_type^[litsym(yyv[yysp-1], yyv[yysp-0])] := act_type;
|
||||
if act_prec<>0 then
|
||||
sym_prec^[litsym(yyv[yysp-1], 0)] := act_prec;
|
||||
sym_prec^[litsym(yyv[yysp-1], 0)] := act_prec;
|
||||
end;
|
||||
62 : begin
|
||||
litsym(yyv[yysp-1], 0);
|
||||
if act_type<>0 then
|
||||
sym_type^[litsym(yyv[yysp-1], yyv[yysp-0])] := act_type;
|
||||
if act_prec<>0 then
|
||||
sym_prec^[litsym(yyv[yysp-1], 0)] := act_prec;
|
||||
sym_prec^[litsym(yyv[yysp-1], 0)] := act_prec;
|
||||
end;
|
||||
63 : begin
|
||||
yyval := yyv[yysp-0];
|
||||
end;
|
||||
64 : begin
|
||||
yyerrok;
|
||||
yyerrok;
|
||||
end;
|
||||
65 : begin
|
||||
yyerrok;
|
||||
yyerrok;
|
||||
end;
|
||||
66 : begin
|
||||
error(ident_expected);
|
||||
error(ident_expected);
|
||||
end;
|
||||
67 : begin
|
||||
error(error_in_def);
|
||||
error(error_in_def);
|
||||
end;
|
||||
68 : begin
|
||||
error(ident_expected);
|
||||
error(ident_expected);
|
||||
end;
|
||||
69 : begin
|
||||
if act_type<>0 then
|
||||
sym_type^[ntsym(yyv[yysp-0])] := act_type;
|
||||
sym_type^[ntsym(yyv[yysp-0])] := act_type;
|
||||
end;
|
||||
70 : begin
|
||||
next_section;
|
||||
next_section;
|
||||
end;
|
||||
71 : begin
|
||||
yyval := yyv[yysp-1];
|
||||
end;
|
||||
72 : begin
|
||||
copy_code;
|
||||
copy_code;
|
||||
end;
|
||||
73 : begin
|
||||
next_section;
|
||||
next_section;
|
||||
end;
|
||||
74 : begin
|
||||
yyval := yyv[yysp-4];
|
||||
end;
|
||||
75 : begin
|
||||
yyerrok;
|
||||
yyerrok;
|
||||
end;
|
||||
76 : begin
|
||||
error(error_in_rule);
|
||||
error(error_in_rule);
|
||||
end;
|
||||
77 : begin
|
||||
error(error_in_rule);
|
||||
error(error_in_rule);
|
||||
end;
|
||||
78 : begin
|
||||
start_rule(ntsym(yyv[yysp-0]));
|
||||
start_rule(ntsym(yyv[yysp-0]));
|
||||
end;
|
||||
79 : begin
|
||||
start_body;
|
||||
start_body;
|
||||
end;
|
||||
80 : begin
|
||||
end_body;
|
||||
end_body;
|
||||
end;
|
||||
81 : begin
|
||||
yyval := yyv[yysp-0];
|
||||
end;
|
||||
82 : begin
|
||||
start_body;
|
||||
start_body;
|
||||
end;
|
||||
83 : begin
|
||||
end_body;
|
||||
end_body;
|
||||
end;
|
||||
84 : begin
|
||||
end;
|
||||
85 : begin
|
||||
add_symbol(yyv[yysp-0]); yyerrok;
|
||||
add_symbol(yyv[yysp-0]); yyerrok;
|
||||
end;
|
||||
86 : begin
|
||||
add_symbol(sym(yyv[yysp-0])); yyerrok;
|
||||
add_symbol(sym(yyv[yysp-0])); yyerrok;
|
||||
end;
|
||||
87 : begin
|
||||
add_symbol(sym(yyv[yysp-0])); yyerrok;
|
||||
add_symbol(sym(yyv[yysp-0])); yyerrok;
|
||||
end;
|
||||
88 : begin
|
||||
add_action; yyerrok;
|
||||
add_action; yyerrok;
|
||||
end;
|
||||
89 : begin
|
||||
error(error_in_rule);
|
||||
error(error_in_rule);
|
||||
end;
|
||||
90 : begin
|
||||
copy_action;
|
||||
copy_action;
|
||||
end;
|
||||
91 : begin
|
||||
yyval := yyv[yysp-2];
|
||||
end;
|
||||
92 : begin
|
||||
copy_single_action;
|
||||
copy_single_action;
|
||||
end;
|
||||
93 : begin
|
||||
end;
|
||||
94 : begin
|
||||
add_rule_prec(yyv[yysp-0]);
|
||||
add_rule_prec(yyv[yysp-0]);
|
||||
end;
|
||||
95 : begin
|
||||
yyval := yyv[yysp-3];
|
||||
end;
|
||||
96 : begin
|
||||
add_rule_prec(litsym(yyv[yysp-0], 0));
|
||||
add_rule_prec(litsym(yyv[yysp-0], 0));
|
||||
end;
|
||||
97 : begin
|
||||
yyval := yyv[yysp-3];
|
||||
end;
|
||||
98 : begin
|
||||
add_rule_prec(litsym(yyv[yysp-0], 0));
|
||||
add_rule_prec(litsym(yyv[yysp-0], 0));
|
||||
end;
|
||||
99 : begin
|
||||
yyval := yyv[yysp-3];
|
||||
@ -468,7 +468,7 @@ begin
|
||||
101 : begin
|
||||
end;
|
||||
102 : begin
|
||||
add_action;
|
||||
add_action;
|
||||
end;
|
||||
end;
|
||||
end(*yyaction*);
|
||||
@ -2131,10 +2131,10 @@ function yylex : integer;
|
||||
('0'<=line[cno]) and (line[cno]<='9') or
|
||||
(line[cno]='_') or
|
||||
(line[cno]='.') ) do
|
||||
begin
|
||||
idstr := idstr+line[cno];
|
||||
inc(cno)
|
||||
end;
|
||||
begin
|
||||
idstr := idstr+line[cno];
|
||||
inc(cno)
|
||||
end;
|
||||
yylval := get_key(idstr);
|
||||
scan;
|
||||
if not end_of_input and (line[cno]=':') then
|
||||
@ -2352,9 +2352,9 @@ function yylex : integer;
|
||||
else
|
||||
case line[cno] of
|
||||
'A'..'Z', 'a'..'z', '_' : yylex := scan_ident;
|
||||
'''', '"' : yylex := scan_literal;
|
||||
'0'..'9' : yylex := scan_num;
|
||||
'%', '\' : yylex := scan_keyword;
|
||||
'''', '"' : yylex := scan_literal;
|
||||
'0'..'9' : yylex := scan_num;
|
||||
'%', '\' : yylex := scan_keyword;
|
||||
'=' :
|
||||
if (cno<length(line)) and (line[succ(cno)]='{') then
|
||||
begin
|
||||
@ -2363,7 +2363,7 @@ function yylex : integer;
|
||||
end
|
||||
else
|
||||
yylex := scan_char;
|
||||
else yylex := scan_char;
|
||||
else yylex := scan_char;
|
||||
end;
|
||||
if lno=lno0 then
|
||||
tokleng := cno-cno0
|
||||
@ -2375,13 +2375,11 @@ var i : Integer;
|
||||
|
||||
begin
|
||||
{$ifdef Unix}
|
||||
{$ifdef BSD}
|
||||
codfilepath:='/usr/local/lib/fpc/lexyacc/';
|
||||
{$else}
|
||||
codfilepath:='/usr/lib/fpc/lexyacc/';
|
||||
{$endif}
|
||||
codfilepath1:='/usr/local/lib/fpc/lexyacc/';
|
||||
codfilepath2:='/usr/lib/fpc/lexyacc/';
|
||||
{$else}
|
||||
codfilepath:=path(paramstr(0));
|
||||
codfilepath1:=path(paramstr(0));
|
||||
codfilepath2:='';
|
||||
{$endif}
|
||||
|
||||
(* sign-on: *)
|
||||
@ -2440,17 +2438,29 @@ begin
|
||||
rewrite(yyout); if ioresult<>0 then fatal(cannot_open_file+pasfilename);
|
||||
rewrite(yylst); if ioresult<>0 then fatal(cannot_open_file+lstfilename);
|
||||
|
||||
(* search code template in current directory, then on path where Yacc
|
||||
was executed from: *)
|
||||
(* search code template *)
|
||||
codfilename := 'yyparse.cod';
|
||||
assign(yycod, codfilename);
|
||||
reset(yycod);
|
||||
if ioresult<>0 then
|
||||
begin
|
||||
codfilename := codfilepath+'yyparse.cod';
|
||||
codfilename := IncludeTrailingPathDelimiter(GetEnvironmentVariable('FPCDIR'))+'lexyacc'+DirectorySeparator+'yyparse.cod';
|
||||
assign(yycod, codfilename);
|
||||
reset(yycod);
|
||||
if ioresult<>0 then fatal(cannot_open_file+codfilename);
|
||||
if ioresult<>0 then
|
||||
begin
|
||||
codfilename := codfilepath1+'yyparse.cod';
|
||||
assign(yycod, codfilename);
|
||||
reset(yycod);
|
||||
if (codfilepath2<>'') and (ioresult<>0) then
|
||||
begin
|
||||
codfilename := codfilepath2+'yyparse.cod';
|
||||
assign(yycod, codfilename);
|
||||
reset(yycod);
|
||||
if ioresult<>0 then
|
||||
fatal(cannot_open_file+codfilename);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
(* parse source grammar: *)
|
||||
@ -2513,4 +2523,4 @@ begin
|
||||
|
||||
halt(errors);
|
||||
|
||||
end(*Yacc*).
|
||||
end(*Yacc*).
|
@ -55,7 +55,7 @@
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
|
||||
$Revision: 1.3 $
|
||||
$Revision: 1.5 $
|
||||
$Modtime: 96-08-01 11:24 $
|
||||
|
||||
|
||||
@ -129,16 +129,6 @@ $History: YACC.PAS $
|
||||
|
||||
*)
|
||||
|
||||
{$IFDEF MsDos}
|
||||
{$M 16384,0,655360}
|
||||
{$ENDIF}
|
||||
{$IFDEF DPMI}
|
||||
{$M 32768}
|
||||
{$ENDIF}
|
||||
{$IFDEF Windows}
|
||||
{$M 32768,0}
|
||||
{$ENDIF}
|
||||
|
||||
{$X+}
|
||||
{$I-}
|
||||
program Yacc;
|
||||
@ -146,15 +136,11 @@ program Yacc;
|
||||
uses
|
||||
{$IFDEF Debug}
|
||||
{$IFDEF DPMI}
|
||||
YaccChk,
|
||||
{ YaccChk, removed as obsolete,
|
||||
YaccChk source not available anymore PM }
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
{$IFDEF Windows}
|
||||
{$IFNDEF Console}
|
||||
WinCrt,
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
YaccLib, YaccBase, YaccMsgs, YaccSem, YaccTabl, YaccPars;
|
||||
YaccLib, YaccBase, YaccMsgs, YaccSem, YaccTabl, YaccPars, SysUtils;
|
||||
|
||||
%}
|
||||
|
||||
@ -725,13 +711,11 @@ var i : Integer;
|
||||
|
||||
begin
|
||||
{$ifdef Unix}
|
||||
{$ifdef BSD}
|
||||
codfilepath:='/usr/local/lib/fpc/lexyacc/';
|
||||
{$else}
|
||||
codfilepath:='/usr/lib/fpc/lexyacc/';
|
||||
{$endif}
|
||||
codfilepath1:='/usr/local/lib/fpc/lexyacc/';
|
||||
codfilepath2:='/usr/lib/fpc/lexyacc/';
|
||||
{$else}
|
||||
codfilepath:=path(paramstr(0));
|
||||
codfilepath1:=path(paramstr(0));
|
||||
codfilepath2:='';
|
||||
{$endif}
|
||||
|
||||
(* sign-on: *)
|
||||
@ -790,17 +774,29 @@ begin
|
||||
rewrite(yyout); if ioresult<>0 then fatal(cannot_open_file+pasfilename);
|
||||
rewrite(yylst); if ioresult<>0 then fatal(cannot_open_file+lstfilename);
|
||||
|
||||
(* search code template in current directory, then on path where Yacc
|
||||
was executed from: *)
|
||||
(* search code template *)
|
||||
codfilename := 'yyparse.cod';
|
||||
assign(yycod, codfilename);
|
||||
reset(yycod);
|
||||
if ioresult<>0 then
|
||||
begin
|
||||
codfilename := codfilepath+'yyparse.cod';
|
||||
codfilename := IncludeTrailingPathDelimiter(GetEnvironmentVariable('FPCDIR'))+'lexyacc'+DirectorySeparator+'yyparse.cod';
|
||||
assign(yycod, codfilename);
|
||||
reset(yycod);
|
||||
if ioresult<>0 then fatal(cannot_open_file+codfilename);
|
||||
if ioresult<>0 then
|
||||
begin
|
||||
codfilename := codfilepath1+'yyparse.cod';
|
||||
assign(yycod, codfilename);
|
||||
reset(yycod);
|
||||
if (codfilepath2<>'') and (ioresult<>0) then
|
||||
begin
|
||||
codfilename := codfilepath2+'yyparse.cod';
|
||||
assign(yycod, codfilename);
|
||||
reset(yycod);
|
||||
if ioresult<>0 then
|
||||
fatal(cannot_open_file+codfilename);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
(* parse source grammar: *)
|
||||
|
@ -66,7 +66,8 @@ yfilename : String;
|
||||
pasfilename : String;
|
||||
lstfilename : String;
|
||||
codfilename : String;
|
||||
codfilepath : String; { Under Linux,
|
||||
codfilepath1,
|
||||
codfilepath2 : String; { Under Linux,
|
||||
binary and conf file are never in 1 directory.}
|
||||
|
||||
(* Yacc input, output, list and code template file: *)
|
||||
|
Loading…
Reference in New Issue
Block a user