rclex.l 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. %{
  2. var
  3. kwtmp: integer;
  4. const
  5. KeywordDefs: array [0..33] of TIdentMapEntry = (
  6. // attribs
  7. (Value: _LANGUAGE; Name: 'LANGUAGE'),
  8. (Value: _CHARACTERISTICS; Name: 'CHARACTERISTICS'),
  9. (Value: _VERSION; Name: 'VERSION'),
  10. (Value: _MOVEABLE; Name: 'MOVEABLE'),
  11. (Value: _FIXED; Name: 'FIXED'),
  12. (Value: _PURE; Name: 'PURE'),
  13. (Value: _IMPURE; Name: 'IMPURE'),
  14. (Value: _PRELOAD; Name: 'PRELOAD'),
  15. (Value: _LOADONCALL; Name: 'LOADONCALL'),
  16. (Value: _DISCARDABLE; Name: 'DISCARDABLE'),
  17. // resource names
  18. (Value: _ANICURSOR; Name: 'ANICURSOR'),
  19. (Value: _ANIICON; Name: 'ANIICON'),
  20. (Value: _BITMAP; Name: 'BITMAP'),
  21. (Value: _CURSOR; Name: 'CURSOR'),
  22. (Value: _DLGINCLUDE; Name: 'DLGINCLUDE'),
  23. (Value: _DLGINIT; Name: 'DLGINIT'),
  24. (Value: _HTML; Name: 'HTML'),
  25. (Value: _ICON; Name: 'ICON'),
  26. (Value: _MANIFEST; Name: 'MANIFEST'),
  27. (Value: _MESSAGETABLE; Name: 'MESSAGETABLE'),
  28. (Value: _PLUGPLAY; Name: 'PLUGPLAY'),
  29. (Value: _STRINGTABLE; Name: 'STRINGTABLE'),
  30. (Value: _RCDATA; Name: 'RCDATA'),
  31. (Value: _VERSIONINFO; Name: 'VERSIONINFO'),
  32. (Value: _VXD; Name: 'VXD'),
  33. // file version fields names
  34. (Value: _FILEVERSION; Name: 'FILEVERSION'),
  35. (Value: _PRODUCTVERSION; Name: 'PRODUCTVERSION'),
  36. (Value: _FILEFLAGSMASK; Name: 'FILEFLAGSMASK'),
  37. (Value: _FILEFLAGS; Name: 'FILEFLAGS'),
  38. (Value: _FILEOS; Name: 'FILEOS'),
  39. (Value: _FILETYPE; Name: 'FILETYPE'),
  40. (Value: _FILESUBTYPE; Name: 'FILESUBTYPE'),
  41. (Value: _BLOCK; Name: 'BLOCK'),
  42. (Value: _VALUE; Name: 'VALUE')
  43. );
  44. function KeywordToInt(k: string; out kw: integer): boolean;
  45. var
  46. i: integer;
  47. begin
  48. Result:= False;
  49. for i:= low(KeywordDefs) to high(KeywordDefs) do begin
  50. if k = KeywordDefs[i].Name then begin
  51. kw:= KeywordDefs[i].Value;
  52. Exit(True);
  53. end;
  54. end;
  55. end;
  56. %}
  57. %x INCOMLINE INCOMMENT INSTRING INSTRINGL
  58. O [0-7]
  59. D [0-9]
  60. H [0-9a-fA-F]
  61. IDENT [a-zA-Z_]([a-zA-Z0-9_])*
  62. %%
  63. "//" start(INCOMLINE);
  64. <INCOMLINE>\n begin start(0); unget_char(nl); end;
  65. <INCOMLINE>. yymore;
  66. "/*" start(INCOMMENT);
  67. <INCOMMENT>. ;
  68. <INCOMMENT>"*/" start(0);
  69. <INCOMMENT>\0 return(_ILLEGAL);
  70. {D}+L? return(_NUMBER);
  71. 0x{H}+L? return(_NUMBER);
  72. 0o{O}+L? return(_NUMBER);
  73. L\" begin start(INSTRINGL); strbuf_begin(); end;
  74. \" begin start(INSTRING); strbuf_begin(); end;
  75. <INSTRING,INSTRINGL>\"\" strbuf_append('"');
  76. <INSTRING>\" begin
  77. start(0);
  78. return(_QUOTEDSTR);
  79. end;
  80. <INSTRINGL>\" begin
  81. start(0);
  82. return(_QUOTEDSTRL);
  83. end;
  84. <INSTRING,INSTRINGL>\\\n ;
  85. <INSTRING,INSTRINGL>\n return(_ILLEGAL);
  86. <INSTRING,INSTRINGL>. strbuf_append(yytext);
  87. \"StringFileInfo\" begin yytext:= 'StringFileInfo'; return(_STR_StringFileInfo); end;
  88. \"VarFileInfo\" begin yytext:= 'VarFileInfo'; return(_STR_VarFileInfo); end;
  89. \"Translation\" begin yytext:= 'Translation'; return(_STR_Translation); end;
  90. BEGIN|{ return(_BEGIN);
  91. END|} return(_END);
  92. {IDENT} begin
  93. if ypreproc.isdefine(yytext) then begin
  94. unget_char(' ');
  95. unget_string(ypreproc.getdefine(yytext));
  96. end else
  97. if KeywordToInt(yytext, kwtmp) then
  98. return(kwtmp)
  99. else
  100. return(_ID);
  101. end;
  102. [ \t\n\f] ;
  103. [,()|^&+-*/%~] returnc(yytext[1]);
  104. . return(_ILLEGAL);
  105. %%
  106. // end.