home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 549a.lha / M2P_v1.0 / mods.lzh / LexAn.mod < prev    next >
Text File  |  1991-08-10  |  3KB  |  167 lines

  1. (*======================================================================*)
  2. (*                         Modula-2 Lexical Analyzer                    *)
  3. (*======================================================================*)
  4. (*  Version:  1.00              Author:   Dennis Brueni                 *)
  5. (*  Date:     07-07-91          Changes:  original                      *)
  6. (*======================================================================*)
  7. (*  The lexical analyzer proper resides in two separate modules.        *)
  8. (*                                                                      *)
  9. (*      (1)  LexAn      Your lookin' at it.                             *)
  10. (*                                                                      *)
  11. (*      (2)  FSM        The Heart of the Beast.  The implememtation of  *)
  12. (*                      of the Finite State Machine.                    *)
  13. (*======================================================================*)
  14.  
  15. IMPLEMENTATION MODULE LexAn;
  16.  
  17. IMPORT
  18.     FIO,Strings,SymLists,MacLists,SymTab,FSM;
  19.  
  20.  
  21.  
  22. (*----------------------------------------------------------------------*)
  23.  
  24. VAR
  25.     MacroList: SymLists.SymList;
  26.  
  27. (*----------------------------------------------------------------------*)
  28.  
  29.  
  30.  
  31.  
  32. PROCEDURE SetSourceFile(FileName: ARRAY OF CHAR):BOOLEAN;
  33.  
  34. BEGIN
  35.     FSM.SourceFile := FIO.Open(FileName);
  36.     IF NOT FIO.GoodFILE(FSM.SourceFile) THEN
  37.         FSM.SourceFile := FIO.INPUT;
  38.         RETURN FALSE;
  39.     ELSE
  40.         RETURN TRUE;
  41.     END;
  42. END SetSourceFile;
  43.  
  44. (*----------------------------------------------------------------------*)
  45.  
  46.  
  47.  
  48. PROCEDURE SetDestFile(FileName: ARRAY OF CHAR):BOOLEAN;
  49.  
  50. BEGIN
  51.     FSM.DestFile := FIO.Create(FileName);
  52.     IF NOT FIO.GoodFILE(FSM.DestFile) THEN
  53.         FSM.DestFile := FIO.OUTPUT;
  54.         RETURN FALSE;
  55.     ELSE
  56.         RETURN TRUE;
  57.     END;
  58. END SetDestFile;
  59.  
  60. (*----------------------------------------------------------------------*)
  61.  
  62.  
  63. PROCEDURE FeedMacro(list: SymLists.SymList);
  64.  
  65. VAR
  66.     temp: SymLists.SymList;
  67.  
  68. BEGIN
  69.     temp:=MacroList;
  70.     MacroList:=SymLists.ConCat(list,temp);
  71.     SymLists.Destroy(temp);
  72. END FeedMacro;
  73.  
  74. (*----------------------------------------------------------------------*)
  75.  
  76. PROCEDURE GetToken;
  77.  
  78. VAR
  79.     temp: MacLists.TokRecPtr;
  80.     retry:BOOLEAN;
  81.  
  82. PROCEDURE GetNext(VAR temp: MacLists.TokRecPtr):BOOLEAN;
  83. BEGIN
  84.     IF SymLists.Empty(MacroList) THEN
  85.         RETURN FALSE;
  86.     ELSE;
  87.         temp:=SymLists.First(MacroList);
  88.         SymLists.Delete(MacroList,temp^.sym^);
  89.         RETURN TRUE;
  90.     END;
  91. END GetNext;
  92.  
  93. BEGIN
  94.     retry:=FALSE;
  95.     IF GetNext(temp) THEN
  96.         WHILE (temp^.typ=FSM.M2KillArg) AND GetNext(temp) DO
  97.             SymTab.Delete(temp^.sym^);
  98.             retry:=NOT GetNext(temp);
  99.         END;
  100.         IF retry THEN
  101.             FSM.GetBSU;
  102.         ELSE
  103.             WITH temp^ DO
  104.                 WITH FSM.Token DO
  105.                     Strings.Assign(sym^,String);
  106.                     Class:=typ;
  107.                     Length:=len;
  108.                 END;
  109.             END;
  110.         END;
  111.     ELSE
  112.         FSM.GetBSU;
  113.     END;
  114.  
  115.  
  116.  
  117. END GetToken;
  118.  
  119. (*----------------------------------------------------------------------*)
  120.  
  121.  
  122. PROCEDURE PrintToken(VAR Tok : FSM.TokenRec);
  123. VAR
  124.     i: CARDINAL;
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155. BEGIN
  156.  
  157. END PrintToken;
  158.  
  159. (************************************************************************)
  160.  
  161. BEGIN
  162.     SymLists.Create(MacroList);
  163.  
  164.  
  165.  
  166. END LexAn.
  167.