http.cup
上传用户:huihesys
上传日期:2007-01-04
资源大小:3877k
文件大小:2k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. package net.wastl.webmail.standalone;
  2. import net.wastl.webmail.server.http.HTTPRequestHeader;
  3. import java_cup.runtime.*;
  4. import java.util.Hashtable;
  5. /*
  6.  * http.cup
  7.  *
  8.  * Created: April 1999
  9.  *
  10.  * Copyright (C) 1999-2000 Sebastian Schaffert
  11.  * 
  12.  * This program is free software; you can redistribute it and/or
  13.  * modify it under the terms of the GNU General Public License
  14.  * as published by the Free Software Foundation; either version 2
  15.  * of the License, or (at your option) any later version.
  16.  * 
  17.  * This program is distributed in the hope that it will be useful,
  18.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.  * GNU General Public License for more details.
  21.  * 
  22.  * You should have received a copy of the GNU General Public License
  23.  * along with this program; if not, write to the Free Software
  24.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  25.  */
  26. parser code {:
  27.   HTTPLexer lexer;
  28.   HTTPRequestHeader parent;
  29.   Connection connection;
  30.   Hashtable current_mime=new Hashtable();
  31.   public HTTPParser(java.io.Reader input, Connection conn, HTTPRequestHeader parent) {
  32.      lexer = new HTTPLexer(input);
  33.      this.parent=parent;
  34.      this.connection=conn;
  35.   }
  36.   public void syntax_error(Symbol cur_token) {
  37.   }
  38.   public void unrecovered_syntax_error(Symbol token) {
  39.   }
  40. :};
  41. scan with {: return lexer.yylex(); :};
  42. terminal java.lang.String METHOD;
  43. terminal java.lang.String VERSION;
  44. terminal java.lang.String URI;
  45. terminal CRLF;
  46. terminal SP;
  47. terminal HEAD_SEP;
  48. terminal java.lang.String STRING_LITERAL;
  49. terminal java.lang.String DATA;
  50. non terminal http_request;
  51. non terminal headers;
  52. non terminal content;
  53. terminal java.lang.String TOKEN;
  54. start with http_request;
  55. http_request ::= METHOD:m SP URI:p SP VERSION:v CRLF headers 
  56. {: parser.parent.setMethod(m); 
  57.            parser.parent.setPath(p); 
  58.            parser.parent.setVersion(v); 
  59.         :}
  60.         | METHOD:m SP URI:p SP VERSION:v CRLF headers content
  61. {: parser.parent.setMethod(m); 
  62.            parser.parent.setPath(p); 
  63.            parser.parent.setVersion(v); 
  64.         :}
  65. ;
  66. headers ::= CRLF 
  67. | TOKEN: k HEAD_SEP DATA:v headers
  68. {: parser.parent.setHeader(k,v); :}
  69. ;
  70. content ::= DATA:d
  71. {: parser.parent.setEncodedContent(d, parser.lexer.getContentType()); :}
  72. ;