/* * @(#)file Parser.jjt * @(#)author Sun Microsystems, Inc. * * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. * */ options { MULTI=true; STATIC=false; NODE_PREFIX= "JDM"; NODE_PACKAGE="com.sun.jmx.snmp.IPAcl"; } PARSER_BEGIN(Parser) package com.sun.jmx.snmp.IPAcl; import java.io.*; public class Parser { } PARSER_END(Parser) SKIP : { " " | "\t" | "\n" | "\r" | <"--" (~["\n","\r"])* ("\n"|"\r"|"\r\n")> | <"#" (~["\n","\r"])* ("\n"|"\r"|"\r\n")> } /* RESERVED WORDS AND LITERALS */ TOKEN : { | | | | | | | | | | | | | | | } TOKEN : /* LITERALS */ { < INTEGER_LITERAL: (["l","L"])? | (["l","L"])? | (["l","L"])? > | < #DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* > | < #HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ > | < #OCTAL_LITERAL: "0" (["0"-"7"])* > } TOKEN : /* V6 LITERALS */ { < V6_ADDRESS: ((( ( ( ":")+ (":")?) | "::" ) ( ":")* ( | ( "." "." "." ))) | ("::")) | ( ( ":")+ ":") > | <#H: (["0"-"9","a"-"f","A"-"F"])+ > | <#D: (["0"-"9"])+ > } TOKEN : /* IDENTIFIERS */ { < IDENTIFIER: ( (|)+ (||)* (|)+ ) | (|)+ > | < #LETTER: ["a"-"z","A"-"Z"] > | < #SEPARATOR: ["-", "_"] > | < #DIGIT: ["0"-"9"] > | } TOKEN: /* SEPARATOR */ { < COMMA: "," > | < DOT: "." > | < MARK: "!" > | < MASK: "/"> } // A file can contain several acl definitions // JDMSecurityDefs SecurityDefs() : {} { [AclBlock()] [TrapBlock()] [InformBlock()] { return jjtThis;} } void AclBlock(): {} { "acl" "=" "{" (AclItem())+ "}" } void AclItem(): {} { "{" jjtThis.com= Communities() jjtThis.access= Access() Managers() "}" } JDMCommunities Communities(): {} { "communities" "=" Community() ( "," Community())* {return jjtThis;} } void Community(): { Token t; } { t= {jjtThis.communityString= t.image;} } JDMAccess Access(): {} { "access" "=" ( {jjtThis.access= RO;} | {jjtThis.access= RW;} ) {return jjtThis;} } void Managers() : { } { "managers" "=" Host() ( "," Host())* } void Host() : { Token t; } { HostName() | LOOKAHEAD( ( "." )* "/" ) NetMask() | LOOKAHEAD( "/" ) NetMaskV6() | LOOKAHEAD( ".") IpAddress() | IpV6Address() | IpMask() } void HostName(): { Token t; } { t= { jjtThis.name.append(t.image); } ( "." t= {jjtThis.name.append( '.').append(t.image); } )* } void IpAddress(): { Token t; } { t= {jjtThis.address.append(t.image); } ( "." t= {jjtThis.address.append( '.').append(t.image); } )* } void IpV6Address(): { Token t; } { t= {jjtThis.address.append(t.image); } } void IpMask(): { Token t; } { t= {jjtThis.address.append(t.image); } ( "!" t= {jjtThis.address.append( '.').append(t.image); } )* } void NetMask(): { Token t; } { t= {jjtThis.address.append(t.image); } ( "." t= {jjtThis.address.append( '.').append(t.image); } )* "/" t= {jjtThis.mask = t.image; } } void NetMaskV6(): { Token t; } { t= {jjtThis.address.append(t.image); } "/" t= {jjtThis.mask = t.image; } } void TrapBlock(): { } { "trap" "=" "{" (TrapItem())* "}" } void TrapItem(): { } { "{" jjtThis.comm= TrapCommunity() TrapInterestedHost() (Enterprise())* "}" } JDMTrapCommunity TrapCommunity(): { Token t; } { "trap-community" "=" t= { jjtThis.community= t.image; return jjtThis; } } void TrapInterestedHost(): { } { "hosts" "=" HostTrap() ("," HostTrap())* } void HostTrap() : { Token t; } { HostName() | IpAddress() | IpV6Address() } void Enterprise(): { Token t; } { "{" "enterprise" "=" t= {jjtThis.enterprise= t.image;} "trap-num" "=" TrapNum() ("," TrapNum())* "}" } void TrapNum(): { Token t; } { t= {jjtThis.low= Integer.parseInt(t.image);} [ "-" t= {jjtThis.high= Integer.parseInt(t.image);} ] } void InformBlock(): { } { "inform" "=" "{" (InformItem())* "}" } void InformItem(): { } { "{" jjtThis.comm= InformCommunity() InformInterestedHost() "}" } JDMInformCommunity InformCommunity(): { Token t; } { "inform-community" "=" t= { jjtThis.community= t.image; return jjtThis; } } void InformInterestedHost(): { } { "hosts" "=" HostInform() ("," HostInform())* } void HostInform() : { Token t; } { HostName() | IpAddress() | IpV6Address() }