Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-12 - 43,50552/fortra.lsl
There are no other files named fortra.lsl in the archive.
LEX version 1.13D			FORTRA    		19-Oct-84

    1	%| 
    2	 | FORTRAN.LEX: 
    3	 | 
    4	 | Lexical analyzer for FORVER version 2.6 
    5	 |% 
    6	 
    7	upper_case	= [A-Z]. 
    8	lower_case	= [a-z]. 
    9	letter		= upper_case | lower_case. 
   10	 
   11	digit		= [0-9]. 
   12	octal		= [0-7]. 
   13	exponent	= 'E' [+\-]? digit+. 
   14	double_exponent	= 'D' [+\-]? digit+. 
   15	 
   16	sp		= '\040'. 
   17	tab		= '\011'. 
   18	ch_bof		= '\b'		% beginning-of-file %. 
   19	ch_eof		= '\e'		% end-of-file %. 
   20	 
   21	id_or_constant	= letter (letter | digit)* 
   22			| digit+. 
   23	 
   24	eol		= [\b\015] '\012'*		% end-of-line % 
   25			|	   '\012'. 
   26	 
   27	line_char	= -[\000-\010\012-\037\177\b\e]	% legal	chars in a line	%. 
   28	printing	= -[\000-\040\177\b\e]		% non-whitespace %. 
   29	whitespace	=  [\040\011]			% space	or tab %. 
   30	space		= '\040'			% just a space %. 
   31	quote_char	= -[\000-\010\012-\037\177\b\e']% "quotable" chars % 
   32			|  eol space* tab digit		% eol with continuation	too % 
   33			|  eol '     ' printing. 
   34	 
   35	separator	-> whitespace+ <skip>		% space	or tab %. 
   36	 
   37	contline	-> ('!'	line_char*)?		% perhaps it's got an in-line comment % 
   38			   ( eol '     ' printing	% standard cont. line % 
   39			   | eol tab digit )		% FORTRAN-10 cont. line	% 
   40				<skip>. 
   41	 
   42	end_line	-> ';' 
   43			 | ('!'	line_char*) ?		% perhaps it's got an in-line comment % 
   44			   eol ( ' '* |	tab ). 
   45	 
   46	end_file	-> ch_eof			% end-of-file char %. 
   47	 
   48	identifier	-> letter (letter | digit)* <check> % your average FORTRAN identifier %. 
   49	function_identifier			% what happens to a FUNCTION name %. 
   50	intrinsic_identifier			% for things like SIN,COS,EXP,... %. 
   51	array_identifier			% to make it different from FUNCTION names %. 
   52	 
   53		% constants % 
   54	 
   55	string_constant	-> "'" ("''" | quote_char)* "'"	% just that: a string constant %. 
   56	hollerith_constant -> digit+ 'H' <holstr> % this requires a special semantic action %. 
   57	 
   58	label_constant	-> [$&]	digit+		% eg. passing a	label to a SUBROUTINE %. 
   59	boolean_constant -> '.TRUE.' | '.FALSE.' % just	what you thought %. 
   60	 
   61	integer_constant -> digit+ / ('.EQ' | '.' [AOXNLGFTaoxnlgft] | nil) 
   62			  | '"' octal+	<intcnv>. 
   63	real_constant	-> ( digit+ '.'	digit* 
   64			   | digit* '.'	digit+)	exponent? 
   65			 | digit+ exponent. 
   66	double_constant	-> ( digit+ '.'	digit* 
   67			   | digit* '.'	digit+)	double_exponent 
   68			 | digit+ double_exponent. 
   69	 
   70		% arithmetic operators % 
   71	 
   72	'+'	-> '+'. 
   73	'\-'	-> '\-'			% \ because of possible	misunderstandings. %. 
   74	'*'	-> '*'. 
   75	'/'	-> '/'. 
   76	 
   77	'**'	-> '**'	| '^'		% allow	^ as an	alternate to **	%. 
   78	 
   79		% logical operators % 
   80	 
   81	and		-> '.AND.'. 
   82	or		-> '.OR.'. 
   83	not		-> '.NOT.'. 
   84	f10_logical_ops	-> '.XOR.'	% FORTRAN-10 special logical operators % 
   85			 | '.EQV.'. 
   86	 
   87		% relational operators % 
   88	 
   89	'<'		-> '.LT.' | '<'. 
   90	'<='		-> '.LE.' | '<='. 
   91	'=='		-> '.EQ.' | '=='. 
   92	'#', '=/='	-> '.NE.' | '#'. 
   93	'>='		-> '.GE.' | '>='. 
   94	'>'		-> '.GT.' | '>'. 
   95	 
   96		% miscelaneous terminals % 
   97	 
   98	'='	-> '='. 
   99	','	-> ','. 
  100	'('	-> '('. 
  101	')'	-> ')'. 
  102	':'	-> ':'		% in array bounds declarations %. 
  103	'$'	-> '$'		% in formats %. 
  104	 
  105		% types	of constants/variables/expressions % 
  106	 
  107	integer		> 'INTEGER'. 
  108	real		> 'REAL'. 
  109	double		> 'DOUBLE'. 
  110	precision	> 'PRECISION'. 
  111	complex		> 'COMPLEX'. 
  112	logical		> 'LOGICAL'. 
  113	string. 
  114	label. 
  115	undeclared. 
  116	 
  117		% declaration pseudo-reserved words % 
  118	 
  119	dimension	> 'DIMENSION'. 
  120	implicit	> 'IMPLICIT'. 
  121	common		> 'COMMON'. 
  122	equivalence	> 'EQUIVALENCE'. 
  123	external	> 'EXTERNAL'. 
  124	parameter	> 'PARAMETER'. 
  125	data		> 'DATA'. 
  126	assign		> 'ASSIGN'. 
  127	namelist	> 'NAMELIST'. 
  128	format		> 'FORMAT'. 
  129	 
  130		% procedure definition pseudo-reserved words % 
  131	 
  132	subroutine	> 'SUBROUTINE'. 
  133	function	> 'FUNCTION'. 
  134	entry		> 'ENTRY'. 
  135	block		> 'BLOCK'.		% from BLOCK DATA % 
  136	program		> 'PROGRAM'. 
  137	 
  138	%*** END and END FILE are special, need	a separate DFA section for them	***% 
  139	end		-> 'END' / whitespace*. 
  140	endf		-> 'END' / whitespace+ 'FILE'. 
  141	 
  142	include		> 'INCLUDE'. 
  143	 
  144		% control pseudo-reserved words	% 
  145	 
  146	goto		> 'GOTO'. 
  147	go		> 'GO'. 
  148	to		> 'TO'. 
  149	call		> 'CALL'. 
  150	do		> 'DO'. 
  151	if		> 'IF'. 
  152	continue	> 'CONTINUE'. 
  153	return		> 'RETURN'. 
  154	stop		> 'STOP'. 
  155	pause		> 'PAUSE'. 
  156	 
  157		% I/O statement	pseudo-reserved	words % 
  158	 
  159	read		> 'READ'. 
  160	write		> 'WRITE'. 
  161	open		> 'OPEN'. 
  162	close		> 'CLOSE'. 
  163	rewind		> 'REWIND'. 
  164	file		> 'FILE'.		% from END FILE	n % 
  165	type		> 'TYPE'. 
  166	accept		> 'ACCEPT'. 
  167	print		> 'PRINT'. 
  168	punch		> 'PUNCH'. 
  169	input		> 'INPUT'. 
  170	reread		> 'REREAD'. 
  171	encode		> 'ENCODE'. 
  172	decode		> 'DECODE'. 
  173	find		> 'FIND'. 
  174	record		> 'RECORD'. 
  175	unload		> 'UNLOAD'. 
  176	backspace	> 'BACKSPACE'. 
  177	skip		> 'SKIP'. 
  178	backfile	> 'BACKFILE'. 
  179	 
  180		% and I	think this is FORTRAN! % 

Lexical analyzer: FORTRA
Tokens defined:   91
NFA states:       421
DFA states:       115 (gained 21 states in minimization)
CPU time:         53.86 seconds.