server.l
上传用户:eo_sii
上传日期:2007-01-05
资源大小:91k
文件大小:3k
源码类别:

手机短信编程

开发平台:

Unix_Linux

  1. %{
  2. /*==========================================================
  3.  * Program : server.l                      Project : smslink
  4.  * Author  : Philippe Andersson.
  5.  * Date    : 02/12/99
  6.  * Version : 0.11b
  7.  * Notice  : (c) Les Ateliers du Heron, 1998 for Scitex Europe, S.A.
  8.  * Comment : Lexer module for the parser (server.y).
  9.  *
  10.  * Modification History :
  11.  * - 0.01a (19/08/98) : Initial release.
  12.  * - 0.02a (21/08/98) : Made it recognize text type for some
  13.  *   returned token value (T_PHNUM & T_TEXT).
  14.  * - 0.03a (22/08/98) : Added recognition for '+' in PHNUM,
  15.  *   and for "he" as short for "help".
  16.  * - 0.04a (28/08/98) : Removed inclusion of server.h (was
  17.  *   useless anyway), since was merged into sms_serv.h.
  18.  * - 0.05a (30/08/98) : Added handling for both [LF] and [CR][LF]
  19.  *   sequences ("rn"), cause [return] translates to rn when
  20.  *   sent through telnet. Moved yyerror () from server.y to here.
  21.  * - 0.06a (24/09/98) : Changed [LF] to [CR][LF] in messages
  22.  *   sent through the socket.
  23.  * - 0.07a (20/10/98) : Added support for 'devicelist' command.
  24.  * ++++ Switched to Beta ++++
  25.  * - 0.08b (21/10/98) : Noticed quoted 'phnum' were considered
  26.  *   'text'. So added optional quote-endquote sequence in 'phnum'
  27.  *   syntax and moved 'phnum' pattern before 'text', otherwize
  28.  *   'text' would play catch-all and hide it.
  29.  * - 0.09b (23/10/98) : Added ' ' as a legal char. in a 'phnum'.
  30.  * - 0.10b (16/05/99) : Added "uptime" command.
  31.  * - 0.11b (02/12/99) : Added "aclist" command.
  32.  *========================================================*/
  33. #include "server.tab.h"
  34. #include "sms_serv.h"
  35. #undef YY_INPUT
  36. #define YY_INPUT(b, r, ms)  (r = my_yyinput(b, ms))
  37. /*-------------------------------------External variables */
  38. /* program specific */
  39. extern int csfd;                      /* client socket FD */
  40. extern char *buffer;    /* scratch space for C/S dialogue */
  41. int yyparse ();
  42. %}
  43. %s PARAM
  44. %s ASSIG
  45. WS [ t]+
  46. PHNUM (")?(+)?[0-9]+[/.- 0-9]*(")?
  47. TEXT "[^"n]*"
  48. VIDENT [a-zA-Z][a-zA-Z0-9]+
  49. %%
  50. {WS} ;
  51. ^he |
  52. ^help {
  53. BEGIN PARAM;
  54. return T_HELP;
  55. }
  56. ^clear {
  57. BEGIN PARAM;
  58. return T_CLEAR;
  59. }
  60. ^send { return T_SEND; }
  61. ^dl |
  62. ^devicelist { return T_DEVLIST; }
  63. ^ut |
  64. ^uptime { return T_UPTIME; }
  65. ^acl |
  66. ^aclist { return T_ACLIST; }
  67. ^quit |
  68. ^exit |
  69. ^bye { return T_QUIT; }
  70. ^stats { return T_STATS; }
  71. ^sh |
  72. ^show {
  73. BEGIN PARAM;
  74. return T_SHOW;
  75. }
  76. ^set {
  77. BEGIN ASSIG;
  78. return T_SET;
  79. }
  80. <PARAM>[a-zA-Z]+ { return T_PARAM; }
  81. <ASSIG>{VIDENT} { return T_NAME; }
  82. {PHNUM} {
  83. yylval.string = (char *) strdup (yytext);
  84. return T_PHNUM;
  85. }
  86. {TEXT} {
  87. yylval.string = (char *) strdup (yytext);
  88. return T_TEXT;
  89. }
  90. rn |
  91. n { return (0); }
  92. . { return (yytext[0]); }
  93. %%
  94. /*========================================================*/
  95. void yyerror (msg)
  96. const char *msg;
  97. {
  98.   sprintf (buffer, "ERROR: %s near <%s>rn", msg, yytext);
  99.   tellsock (csfd, buffer);
  100. }
  101. /*==========================================================
  102.  * EOF : server.l
  103.  *===================*/