Parser.h
上传用户:surprise9
上传日期:2007-01-04
资源大小:426k
文件大小:3k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. // This is part of the WAR SOFTWARE SERIES initiated by Jarle Aase
  2. // Copyright 1996 by Jarle Aase. All rights reserved.
  3. // See the "War Software Series Licende Agreement" for details concerning 
  4. // use and distribution.
  5. // ---
  6. // This source code, executables and programs containing source code or
  7. // binaries or proprietetary technology from the War Software Series are
  8. // NOT alloed used, viewed or tested by any governmental agencies in
  9. // any countries. This includes the government, departments, police, 
  10. // military etc.
  11. // ---
  12. // This file is intended for use with Tab space = 2
  13. // Created and maintained in MSVC Developer Studio
  14. // ---
  15. // NAME : Parser.h
  16. // PURPOSE : Header for the command parser submodule
  17. // COMMENT : If I've had the time I would have written a Yacc
  18. // like generator, but my time schedule is too tight
  19. // so I guess I have to do it simple this time.
  20. //
  21. // PROGRAM : 
  22. // DATE : Sept. 26 1996
  23. // AUTHOR : Jarle Aase
  24. // ---
  25. // REVISION HISTORY
  26. // 
  27. #ifndef __PARSERH
  28. #define __PARSERH
  29. ///////////////////////////////////////////////////////////////////////
  30. // STokenTab
  31. enum // What we want from lex
  32. {
  33. LEX_WANT_CMD,
  34. LEX_WANT_STRING,
  35. LEX_WANT_BOOL,
  36. LEX_WANT_INT,
  37. LEX_WANT_CHAR
  38. };
  39. #define LEX_PARSE_QUOTES 0x1000
  40. enum // General token ID's
  41. {
  42. // Must be syncronized with LEX_WANT_*
  43. TOK_STRING = LEX_WANT_STRING, 
  44. TOK_BOOL, TOK_INT, TOK_CHAR,
  45. // Used internally
  46. TOK_INVALID,
  47. TOK_END_OF_TOKENS,
  48. // start of derived class enum ID
  49. TOK_START_TAB
  50. };
  51. typedef struct STokenTabDef
  52. {
  53. int TokenID; // Token that identifies this node
  54. LPCSTR Token;
  55. } STokenTab;
  56. ///////////////////////////////////////////////////////////////////////
  57. // SCommandTtree
  58. enum // General Command ID's
  59. {
  60. // Return values
  61. CMD_PARSE_ERROR, 
  62. CMD_UNKNOWN_COMMAND,
  63. CMD_UNKNOWN_PARAMETER, 
  64. CMD_MISSING_PARAMETER,
  65. CMD_NOT_IMPLEMENTED,
  66. CMD_BAD_LEVEL,
  67. // Used internally
  68. CMD_INVALID,
  69. // start of derived class enum ID
  70. CMD_START_TREE
  71. };
  72. // Flags
  73. #define CMDF_NOT_IMPLEMENTED 0x0001
  74. #define CMDF_PARAMETER 0x0002
  75. #define CMDF_NOPARAM 0x0004
  76. #define CMDF_PARSE_CMD_LINE 0x0008
  77. typedef struct SCommandTreeDef
  78. {
  79. int TokenID; // Token that identifies this node
  80. int CommandID; // Command ID to execute
  81. int AccessLevel; // Access level to process
  82. int Flags; // Misc flags
  83. struct SCommandTreeDef *NextLevel;
  84. int LexTokenDelim;
  85. int LexWhatWeWant;
  86. LPCSTR CommandSyntax;
  87. } SCommandTree;
  88. ///////////////////////////////////////////////////////////////////////
  89. // CCommandParser
  90. // Override to implement commands
  91. // Call base class to process basic commands like "QUIT" and "HELP"
  92. class CCmdArgs;
  93. class DLL_WAR_SOFTWARE_ CCommandParser
  94. {
  95. public:
  96. SCommandTree *m_Commands;
  97. STokenTab *m_Tokens;
  98. public:
  99. CCommandParser();
  100. virtual int ParseCmd(LPCSTR CmdLine, CCmdArgs& Args, int Level);
  101. public:
  102. virtual int yyParse(LPCSTR CmdLine, SCommandTree *CmdPtr, STokenTab *LexTab, CCmdArgs& Args);
  103. virtual int yyLex(LPCSTR *CmdLine, STokenTab *LexTab, int LexEOT, int Want, CCmdArgs& Args);
  104. };
  105. #endif __PARSERH