14ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/*@bgen(jjtree) Generated By:JJTree: Do not edit this line. /Users/jason/Projects/apache-mime4j-0.3/target/generated-sources/jjtree/org/apache/james/mime4j/field/address/parser/AddressListParser.jj */
24fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*//****************************************************************
34fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Licensed to the Apache Software Foundation (ASF) under one   *
44fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * or more contributor license agreements.  See the NOTICE file *
54fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * distributed with this work for additional information        *
64fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * regarding copyright ownership.  The ASF licenses this file   *
74fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * to you under the Apache License, Version 2.0 (the            *
84fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * "License"); you may not use this file except in compliance   *
94fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * with the License.  You may obtain a copy of the License at   *
104fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *                                                              *
114fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *   http://www.apache.org/licenses/LICENSE-2.0                 *
124fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *                                                              *
134fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Unless required by applicable law or agreed to in writing,   *
144fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * software distributed under the License is distributed on an  *
154fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
164fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * KIND, either express or implied.  See the License for the    *
174fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * specific language governing permissions and limitations      *
184fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * under the License.                                           *
194fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ****************************************************************/
204fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
214fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
224fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/**
234fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * RFC2822 address list parser.
244fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *
254fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Created 9/17/2004
264fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * by Joe Cheng <code@joecheng.com>
274fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */
284fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
294fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyoptions {
304fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	STATIC=false;
314fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	LOOKAHEAD=1;
324fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	//DEBUG_PARSER=true;
334fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	//DEBUG_TOKEN_MANAGER=true;
344fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
354fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
364fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedyPARSER_BEGIN(AddressListParser)
374fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*
384fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  Copyright 2004 the mime4j project
394fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *
404fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  Licensed under the Apache License, Version 2.0 (the "License");
414fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  you may not use this file except in compliance with the License.
424fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  You may obtain a copy of the License at
434fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *
444fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *      http://www.apache.org/licenses/LICENSE-2.0
454fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *
464fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  Unless required by applicable law or agreed to in writing, software
474fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  distributed under the License is distributed on an "AS IS" BASIS,
484fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
494fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  See the License for the specific language governing permissions and
504fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  limitations under the License.
514fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */
524fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedypackage org.apache.james.mime4j.field.address.parser;
534fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapublic class AddressListParser/*@bgen(jjtree)*/implements AddressListParserTreeConstants/*@egen*/ {/*@bgen(jjtree)*/
554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected JJTAddressListParserState jjtree = new JJTAddressListParserState();
564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
574fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
584fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    public static void main(String args[]) throws ParseException {
594fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy		while (true) {
604fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy		    try {
614fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy				AddressListParser parser = new AddressListParser(System.in);
624fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy		    	parser.parseLine();
634fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy		    	((SimpleNode)parser.jjtree.rootNode()).dump("> ");
644fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy		    } catch (Exception x) {
654fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy				x.printStackTrace();
664fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy				return;
674fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy		    }
684fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy		}
694fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    }
704fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
714fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    private static void log(String msg) {
724fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    	System.out.print(msg);
734fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    }
744fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
754fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    public ASTaddress_list parse() throws ParseException {
764fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy        try {
774fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    	    parseAll();
784fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    	    return (ASTaddress_list)jjtree.rootNode();
794fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    	} catch (TokenMgrError tme) {
804fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    	    throw new ParseException(tme.getMessage());
814fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    	}
824fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    }
834fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
844fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
854fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    void jjtreeOpenNodeScope(Node n) {
864fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    	((SimpleNode)n).firstToken = getToken(1);
874fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    }
884fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
894fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    void jjtreeCloseNodeScope(Node n) {
904fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    	((SimpleNode)n).lastToken = getToken(0);
914fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy    }
924fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
934fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
944fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedyPARSER_END(AddressListParser)
954fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
964fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyvoid parseLine()       :
974fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{}
984fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
994fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	address_list() ["\r"] "\n"
1004fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
1014fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
1024fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyvoid parseAll()       :
1034fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{}
1044fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
1054fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	address_list() <EOF>
1064fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
1074fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
1084fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyvoid address_list() :
1094ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) address_list */
1104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  ASTaddress_list jjtn000 = new ASTaddress_list(JJTADDRESS_LIST);
1114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  boolean jjtc000 = true;
1124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtree.openNodeScope(jjtn000);
1134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtreeOpenNodeScope(jjtn000);
1144fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/}
1154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) address_list */
1164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        try {
1174fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
1184fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	[ address() ]
1194fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	(
1204fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy		","
1214fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy		[ address() ]
1224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	)*/*@bgen(jjtree)*/
1234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } catch (Throwable jjte000) {
1244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
1254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.clearNodeScope(jjtn000);
1264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtc000 = false;
1274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          } else {
1284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.popNode();
1294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
1304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjte000 instanceof RuntimeException) {
1314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw (RuntimeException)jjte000;
1324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
1334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjte000 instanceof ParseException) {
1344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw (ParseException)jjte000;
1354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
1364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          throw (Error)jjte000;
1374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } finally {
1384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
1394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.closeNodeScope(jjtn000, true);
1404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtreeCloseNodeScope(jjtn000);
1414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
1424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
1434fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
1444fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
1454fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
1464fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyvoid address() :
1474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) address */
1484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  ASTaddress jjtn000 = new ASTaddress(JJTADDRESS);
1494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  boolean jjtc000 = true;
1504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtree.openNodeScope(jjtn000);
1514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtreeOpenNodeScope(jjtn000);
1524fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/}
1534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) address */
1544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        try {
1554fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
1564fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	LOOKAHEAD(2147483647)
1574fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	addr_spec()
1584fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy|	angle_addr()
1594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira|	( phrase() (group_body() | angle_addr()) )/*@bgen(jjtree)*/
1604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } catch (Throwable jjte000) {
1614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
1624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.clearNodeScope(jjtn000);
1634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtc000 = false;
1644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          } else {
1654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.popNode();
1664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
1674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjte000 instanceof RuntimeException) {
1684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw (RuntimeException)jjte000;
1694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
1704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjte000 instanceof ParseException) {
1714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw (ParseException)jjte000;
1724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
1734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          throw (Error)jjte000;
1744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } finally {
1754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
1764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.closeNodeScope(jjtn000, true);
1774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtreeCloseNodeScope(jjtn000);
1784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
1794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
1804fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
1814fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
1824fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
1834fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyvoid mailbox() :
1844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) mailbox */
1854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  ASTmailbox jjtn000 = new ASTmailbox(JJTMAILBOX);
1864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  boolean jjtc000 = true;
1874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtree.openNodeScope(jjtn000);
1884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtreeOpenNodeScope(jjtn000);
1894fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/}
1904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) mailbox */
1914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        try {
1924fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
1934fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	LOOKAHEAD(2147483647)
1944fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	addr_spec()
1954fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy|	angle_addr()
1964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira|	name_addr()/*@bgen(jjtree)*/
1974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } catch (Throwable jjte000) {
1984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
1994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.clearNodeScope(jjtn000);
2004ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtc000 = false;
2014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          } else {
2024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.popNode();
2034ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
2044ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjte000 instanceof RuntimeException) {
2054ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw (RuntimeException)jjte000;
2064ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
2074ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjte000 instanceof ParseException) {
2084ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw (ParseException)jjte000;
2094ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
2104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          throw (Error)jjte000;
2114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } finally {
2124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
2134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.closeNodeScope(jjtn000, true);
2144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtreeCloseNodeScope(jjtn000);
2154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
2164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
2174fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
2184fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
2194fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
2204fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyvoid name_addr() :
2214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) name_addr */
2224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  ASTname_addr jjtn000 = new ASTname_addr(JJTNAME_ADDR);
2234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  boolean jjtc000 = true;
2244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtree.openNodeScope(jjtn000);
2254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtreeOpenNodeScope(jjtn000);
2264fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/}
2274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) name_addr */
2284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        try {
2294fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
2304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	phrase() angle_addr()/*@bgen(jjtree)*/
2314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } catch (Throwable jjte000) {
2324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
2334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.clearNodeScope(jjtn000);
2344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtc000 = false;
2354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          } else {
2364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.popNode();
2374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
2384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjte000 instanceof RuntimeException) {
2394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw (RuntimeException)jjte000;
2404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
2414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjte000 instanceof ParseException) {
2424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw (ParseException)jjte000;
2434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
2444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          throw (Error)jjte000;
2454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } finally {
2464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
2474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.closeNodeScope(jjtn000, true);
2484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtreeCloseNodeScope(jjtn000);
2494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
2504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
2514fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
2524fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
2534fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
2544fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyvoid group_body() :
2554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) group_body */
2564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  ASTgroup_body jjtn000 = new ASTgroup_body(JJTGROUP_BODY);
2574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  boolean jjtc000 = true;
2584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtree.openNodeScope(jjtn000);
2594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtreeOpenNodeScope(jjtn000);
2604fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/}
2614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) group_body */
2624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        try {
2634fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
2644fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	":"
2654fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	[ mailbox() ]
2664fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	(
2674fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy		","
2684fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy		[ mailbox() ]
2694fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	)*
2704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	";"/*@bgen(jjtree)*/
2714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } catch (Throwable jjte000) {
2724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
2734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.clearNodeScope(jjtn000);
2744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtc000 = false;
2754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          } else {
2764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.popNode();
2774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
2784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjte000 instanceof RuntimeException) {
2794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw (RuntimeException)jjte000;
2804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
2814ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjte000 instanceof ParseException) {
2824ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw (ParseException)jjte000;
2834ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
2844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          throw (Error)jjte000;
2854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } finally {
2864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
2874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.closeNodeScope(jjtn000, true);
2884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtreeCloseNodeScope(jjtn000);
2894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
2904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
2914fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
2924fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
2934fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
2944fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyvoid angle_addr() :
2954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) angle_addr */
2964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  ASTangle_addr jjtn000 = new ASTangle_addr(JJTANGLE_ADDR);
2974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  boolean jjtc000 = true;
2984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtree.openNodeScope(jjtn000);
2994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtreeOpenNodeScope(jjtn000);
3004fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/}
3014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) angle_addr */
3024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        try {
3034fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
3044ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	"<" [ route() ] addr_spec() ">"/*@bgen(jjtree)*/
3054ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } catch (Throwable jjte000) {
3064ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
3074ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.clearNodeScope(jjtn000);
3084ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtc000 = false;
3094ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          } else {
3104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.popNode();
3114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
3124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjte000 instanceof RuntimeException) {
3134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw (RuntimeException)jjte000;
3144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
3154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjte000 instanceof ParseException) {
3164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw (ParseException)jjte000;
3174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
3184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          throw (Error)jjte000;
3194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } finally {
3204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
3214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.closeNodeScope(jjtn000, true);
3224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtreeCloseNodeScope(jjtn000);
3234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
3244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
3254fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
3264fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
3274fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
3284fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyvoid route() :
3294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) route */
3304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  ASTroute jjtn000 = new ASTroute(JJTROUTE);
3314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  boolean jjtc000 = true;
3324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtree.openNodeScope(jjtn000);
3334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtreeOpenNodeScope(jjtn000);
3344fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/}
3354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) route */
3364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        try {
3374fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
3384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	"@" domain() ( (",")* "@" domain() )* ":"/*@bgen(jjtree)*/
3394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } catch (Throwable jjte000) {
3404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
3414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.clearNodeScope(jjtn000);
3424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtc000 = false;
3434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          } else {
3444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.popNode();
3454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
3464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjte000 instanceof RuntimeException) {
3474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw (RuntimeException)jjte000;
3484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
3494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjte000 instanceof ParseException) {
3504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw (ParseException)jjte000;
3514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
3524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          throw (Error)jjte000;
3534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } finally {
3544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
3554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.closeNodeScope(jjtn000, true);
3564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtreeCloseNodeScope(jjtn000);
3574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
3584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
3594fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
3604fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
3614fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
3624fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyvoid phrase() :
3634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) phrase */
3644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  ASTphrase jjtn000 = new ASTphrase(JJTPHRASE);
3654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  boolean jjtc000 = true;
3664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtree.openNodeScope(jjtn000);
3674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtreeOpenNodeScope(jjtn000);
3684fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/}
3694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) phrase */
3704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiratry {
3714fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
3724fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy(	<DOTATOM>
3734fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy|	<QUOTEDSTRING>
3744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira)+/*@bgen(jjtree)*/
3754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira} finally {
3764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  if (jjtc000) {
3774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    jjtree.closeNodeScope(jjtn000, true);
3784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    jjtreeCloseNodeScope(jjtn000);
3794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira}
3814fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
3824fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
3834fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
3844fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyvoid addr_spec() :
3854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) addr_spec */
3864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  ASTaddr_spec jjtn000 = new ASTaddr_spec(JJTADDR_SPEC);
3874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  boolean jjtc000 = true;
3884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtree.openNodeScope(jjtn000);
3894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtreeOpenNodeScope(jjtn000);
3904fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/}
3914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) addr_spec */
3924ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        try {
3934fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
3944ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	( local_part() "@" domain() )/*@bgen(jjtree)*/
3954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } catch (Throwable jjte000) {
3964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
3974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.clearNodeScope(jjtn000);
3984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtc000 = false;
3994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          } else {
4004ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.popNode();
4014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
4024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjte000 instanceof RuntimeException) {
4034ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw (RuntimeException)jjte000;
4044ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
4054ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjte000 instanceof ParseException) {
4064ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw (ParseException)jjte000;
4074ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
4084ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          throw (Error)jjte000;
4094ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } finally {
4104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
4114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.closeNodeScope(jjtn000, true);
4124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtreeCloseNodeScope(jjtn000);
4134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
4144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
4154fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
4164fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
4174fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
4184fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyvoid local_part() :
4194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) local_part */
4204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  ASTlocal_part jjtn000 = new ASTlocal_part(JJTLOCAL_PART);
4214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  boolean jjtc000 = true;
4224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtree.openNodeScope(jjtn000);
4234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtreeOpenNodeScope(jjtn000);
4244fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/ Token t; }
4254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) local_part */
4264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        try {
4274fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
4284fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	( t=<DOTATOM> | t=<QUOTEDSTRING> )
4294fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	(	[t="."]
4304fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy		{
4314fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy			if (t.image.charAt(t.image.length() - 1) != '.' || t.kind == AddressListParserConstants.QUOTEDSTRING)
4324fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy				throw new ParseException("Words in local part must be separated by '.'");
4334fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy		}
4344fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy		(	t=<DOTATOM> | t=<QUOTEDSTRING> )
4354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira	)*/*@bgen(jjtree)*/
4364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } finally {
4374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
4384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.closeNodeScope(jjtn000, true);
4394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtreeCloseNodeScope(jjtn000);
4404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
4414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
4424fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
4434fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
4444fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
4454fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyvoid domain() :
4464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) domain */
4474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  ASTdomain jjtn000 = new ASTdomain(JJTDOMAIN);
4484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  boolean jjtc000 = true;
4494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtree.openNodeScope(jjtn000);
4504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  jjtreeOpenNodeScope(jjtn000);
4514fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/ Token t; }
4524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{/*@bgen(jjtree) domain */
4534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        try {
4544fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
4554fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	(	t=<DOTATOM>
4564fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy		(	[t="."]
4574fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy			{
4584fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy				if (t.image.charAt(t.image.length() - 1) != '.')
4594fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy					throw new ParseException("Atoms in domain names must be separated by '.'");
4604fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy			}
4614fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy			t=<DOTATOM>
4624fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy		)*
4634fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	)
4644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira|	<DOMAINLITERAL>/*@bgen(jjtree)*/
4654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } finally {
4664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          if (jjtc000) {
4674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtree.closeNodeScope(jjtn000, true);
4684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            jjtreeCloseNodeScope(jjtn000);
4694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira          }
4704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
4714fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*@egen*/
4724fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
4734fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
4744fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedySPECIAL_TOKEN :
4754fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
4764fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 	< WS: ( [" ", "\t"] )+ >
4774fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
4784fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
4794fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedyTOKEN :
4804fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
4814fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	< #ALPHA: ["a" - "z", "A" - "Z"] >
4824fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy|	< #DIGIT: ["0" - "9"] >
4834fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy|	< #ATEXT: ( <ALPHA> | <DIGIT>
4844fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy			  | "!" | "#" | "$" | "%"
4854fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy			  | "&" | "'" | "*" | "+"
4864fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy			  | "-" | "/" | "=" | "?"
4874fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy			  | "^" | "_" | "`" | "{"
4884fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy			  | "|" | "}" | "~"
4894fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy			  )>
4904fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy|	< DOTATOM: <ATEXT> ( <ATEXT> | "." )* >
4914fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
4924fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
4934fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedyTOKEN_MGR_DECLS :
4944fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
4954fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	// Keeps track of how many levels of comment nesting
4964fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	// we've encountered.  This is only used when the 2nd
4974fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	// level is reached, for example ((this)), not (this).
4984fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	// This is because the outermost level must be treated
4994fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	// specially anyway, because the outermost ")" has a
5004fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	// different token type than inner ")" instances.
5014fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	static int commentNest;
5024fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
5034fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5044fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedyMORE :
5054fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
5064fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	// domain literal
5074fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	"[" : INDOMAINLITERAL
5084fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
5094fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5104fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy<INDOMAINLITERAL>
5114fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedyMORE :
5124fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
5134fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	< <QUOTEDPAIR>> { image.deleteCharAt(image.length() - 2); }
5144fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy|	< ~["[", "]", "\\"] >
5154fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
5164fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5174fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy<INDOMAINLITERAL>
5184fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedyTOKEN :
5194fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
5204fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	< DOMAINLITERAL: "]" > { matchedToken.image = image.toString(); }: DEFAULT
5214fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
5224fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5234fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedyMORE :
5244fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
5254fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	// starts a comment
5264fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	"(" : INCOMMENT
5274fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
5284fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5294fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy<INCOMMENT>
5304fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedySKIP :
5314fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
5324fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	// ends a comment
5334fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	< COMMENT: ")" > : DEFAULT
5344fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	// if this is ever changed to not be a SKIP, need
5354fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	// to make sure matchedToken.token = token.toString()
5364fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	// is called.
5374fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
5384fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5394fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy<INCOMMENT>
5404fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedyMORE :
5414fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
5424fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	< <QUOTEDPAIR>> { image.deleteCharAt(image.length() - 2); }
5434fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy|	"(" { commentNest = 1; } : NESTED_COMMENT
5444fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy|	< <ANY>>
5454fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
5464fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5474fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy<NESTED_COMMENT>
5484fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedyMORE :
5494fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
5504fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	< <QUOTEDPAIR>> { image.deleteCharAt(image.length() - 2); }
5514fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy|	"(" { ++commentNest; }
5524fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy|	")" { --commentNest; if (commentNest == 0) SwitchTo(INCOMMENT); }
5534fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy|	< <ANY>>
5544fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
5554fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5564fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5574fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy// QUOTED STRINGS
5584fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5594fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedyMORE :
5604fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
5614fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	"\"" { image.deleteCharAt(image.length() - 1); } : INQUOTEDSTRING
5624fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
5634fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5644fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy<INQUOTEDSTRING>
5654fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedyMORE :
5664fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
5674fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	< <QUOTEDPAIR>> { image.deleteCharAt(image.length() - 2); }
5684fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy|	< (~["\"", "\\"])+ >
5694fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
5704fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5714fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy<INQUOTEDSTRING>
5724fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedyTOKEN :
5734fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
5744fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	< QUOTEDSTRING: "\"" > { matchedToken.image = image.substring(0, image.length() - 1); } : DEFAULT
5754fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
5764fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5774fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy// GLOBALS
5784fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5794fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy<*>
5804fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedyTOKEN :
5814fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
5824fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	< #QUOTEDPAIR: "\\" <ANY> >
5834fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy|	< #ANY: ~[] >
5844fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
5854fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5864fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy// ERROR!
5874fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*
5884fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5894fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy<*>
5904fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott KennedyTOKEN :
5914fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy{
5924fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy	< UNEXPECTED_CHAR: <ANY> >
5934fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy}
5944fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy
5954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira*/