mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 22:11:12 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | |
| (* lexical analyzer template (TP Lex V3.0), V1.0 3-2-91 AG *)
 | |
| 
 | |
| (* global definitions: *)
 | |
| %%
 | |
| 
 | |
| function yylex : Integer;
 | |
| 
 | |
| procedure yyaction ( yyruleno : Integer );
 | |
|   (* local definitions: *)
 | |
| %%
 | |
| begin
 | |
|   (* actions: *)
 | |
|   case yyruleno of
 | |
| %%
 | |
|   end;
 | |
| end(*yyaction*);
 | |
| 
 | |
| (* DFA table: *)
 | |
| %%
 | |
| 
 | |
| var yyn : Integer;
 | |
| 
 | |
| label start, scan, action;
 | |
| 
 | |
| begin
 | |
| 
 | |
| start:
 | |
| 
 | |
|   (* initialize: *)
 | |
| 
 | |
|   yynew;
 | |
| 
 | |
| scan:
 | |
| 
 | |
|   (* mark positions and matches: *)
 | |
| 
 | |
|   for yyn := yykl[yystate] to     yykh[yystate] do yymark(yyk[yyn]);
 | |
|   for yyn := yymh[yystate] downto yyml[yystate] do yymatch(yym[yyn]);
 | |
| 
 | |
|   if yytl[yystate]>yyth[yystate] then goto action; (* dead state *)
 | |
| 
 | |
|   (* get next character: *)
 | |
| 
 | |
|   yyscan;
 | |
| 
 | |
|   (* determine action: *)
 | |
| 
 | |
|   yyn := yytl[yystate];
 | |
|   while (yyn<=yyth[yystate]) and not (yyactchar in yyt[yyn].cc) do inc(yyn);
 | |
|   if yyn>yyth[yystate] then goto action;
 | |
|     (* no transition on yyactchar in this state *)
 | |
| 
 | |
|   (* switch to new state: *)
 | |
| 
 | |
|   yystate := yyt[yyn].s;
 | |
| 
 | |
|   goto scan;
 | |
| 
 | |
| action:
 | |
| 
 | |
|   (* execute action: *)
 | |
| 
 | |
|   if yyfind(yyrule) then
 | |
|     begin
 | |
|       yyaction(yyrule);
 | |
|       if yyreject then goto action;
 | |
|     end
 | |
|   else if not yydefault and yywrap then
 | |
|     begin
 | |
|       yyclear;
 | |
|       return(0);
 | |
|     end;
 | |
| 
 | |
|   if not yydone then goto start;
 | |
| 
 | |
|   yylex := yyretval;
 | |
| 
 | |
| end(*yylex*);
 | |
| 
 | 
