| /* |
| * @(#)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 : |
| { |
| <ACCESS: "access"> |
| | <ACL: "acl"> |
| | <ASSIGN: "="> |
| | <COMMUNITIES: "communities"> |
| | <ENTERPRISE: "enterprise"> |
| | <HOSTS: "hosts"> |
| | <LBRACE: "{"> |
| | <MANAGERS: "managers"> |
| | <RANGE: "-"> |
| | <RBRACE: "}"> |
| | <RO: "read-only"> |
| | <RW: "read-write"> |
| | <TRAP: "trap"> |
| | <INFORM: "inform"> |
| | <TRAPCOMMUNITY: "trap-community"> |
| | <INFORMCOMMUNITY: "inform-community"> |
| | <TRAPNUM: "trap-num"> |
| } |
| |
| |
| |
| TOKEN : /* LITERALS */ |
| { |
| < INTEGER_LITERAL: |
| <DECIMAL_LITERAL> (["l","L"])? |
| | <HEX_LITERAL> (["l","L"])? |
| | <OCTAL_LITERAL> (["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> ":")+ (":")?) | "::" ) (<H> ":")* (<H> | (<D> "." <D> "." <D> "." <D>))) | ("::")) | ( (<H> ":")+ ":") > |
| | |
| <#H: (["0"-"9","a"-"f","A"-"F"])+ > |
| | |
| <#D: (["0"-"9"])+ > |
| } |
| |
| TOKEN : /* IDENTIFIERS */ |
| { |
| < IDENTIFIER: ( (<DIGIT>|<LETTER>)+ (<SEPARATOR>|<LETTER>|<DIGIT>)* (<DIGIT>|<LETTER>)+ ) | (<DIGIT>|<LETTER>)+ > |
| | |
| < #LETTER: ["a"-"z","A"-"Z"] > |
| | |
| < #SEPARATOR: ["-", "_"] > |
| | |
| < #DIGIT: ["0"-"9"] > |
| | |
| <CSTRING: "\"" (~["\""])* "\""> |
| } |
| |
| |
| |
| TOKEN: /* SEPARATOR */ |
| { |
| < COMMA: "," > |
| | < DOT: "." > |
| | < MARK: "!" > |
| | < MASK: "/"> |
| } |
| |
| // A file can contain several acl definitions |
| // |
| JDMSecurityDefs SecurityDefs() : {} |
| { |
| [AclBlock()] |
| [TrapBlock()] |
| [InformBlock()] |
| <EOF> |
| { 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=<IDENTIFIER> {jjtThis.communityString= t.image;} |
| } |
| |
| JDMAccess Access(): {} |
| { |
| "access" "=" ( <RO> {jjtThis.access= RO;} |
| | |
| <RW> {jjtThis.access= RW;} |
| ) |
| {return jjtThis;} |
| } |
| |
| |
| void Managers() : { } |
| { |
| "managers" "=" Host() ( "," Host())* |
| } |
| |
| void Host() : |
| { |
| Token t; |
| } |
| { |
| HostName() |
| | |
| LOOKAHEAD(<INTEGER_LITERAL> ( "." <INTEGER_LITERAL> )* "/" <INTEGER_LITERAL>) |
| NetMask() |
| | |
| LOOKAHEAD(<V6_ADDRESS> "/" <INTEGER_LITERAL>) |
| NetMaskV6() |
| | |
| LOOKAHEAD(<INTEGER_LITERAL> ".") |
| IpAddress() |
| | |
| IpV6Address() |
| | |
| IpMask() |
| } |
| |
| void HostName(): |
| { |
| Token t; |
| } |
| { |
| t=<IDENTIFIER> { jjtThis.name.append(t.image); } |
| ( |
| "." t=<IDENTIFIER> |
| {jjtThis.name.append( "." + t.image); } |
| )* |
| |
| } |
| |
| void IpAddress(): |
| { |
| Token t; |
| } |
| { |
| |
| t= <INTEGER_LITERAL> |
| {jjtThis.address.append(t.image); } |
| ( |
| "." t= <INTEGER_LITERAL> |
| {jjtThis.address.append( "." + t.image); } |
| )* |
| |
| } |
| |
| void IpV6Address(): |
| { |
| Token t; |
| } |
| { |
| |
| t= <V6_ADDRESS> |
| {jjtThis.address.append(t.image); } |
| } |
| |
| void IpMask(): |
| { |
| Token t; |
| } |
| { |
| |
| t= <INTEGER_LITERAL> |
| {jjtThis.address.append(t.image); } |
| ( |
| "!" t= <INTEGER_LITERAL> |
| {jjtThis.address.append( "." + t.image); } |
| )* |
| } |
| |
| void NetMask(): |
| { |
| Token t; |
| } |
| { |
| |
| t= <INTEGER_LITERAL> |
| {jjtThis.address.append(t.image); } |
| ( |
| "." t= <INTEGER_LITERAL> |
| {jjtThis.address.append( "." + t.image); } |
| )* "/" t= <INTEGER_LITERAL> {jjtThis.mask = t.image; } |
| } |
| |
| void NetMaskV6(): |
| { |
| Token t; |
| } |
| { |
| |
| t= <V6_ADDRESS> |
| {jjtThis.address.append(t.image); } |
| |
| "/" t= <INTEGER_LITERAL> {jjtThis.mask = t.image; } |
| } |
| |
| void TrapBlock(): { } |
| { |
| "trap" "=" "{" (TrapItem())* "}" |
| } |
| |
| void TrapItem(): { } |
| { |
| "{" jjtThis.comm= TrapCommunity() TrapInterestedHost() (Enterprise())* "}" |
| } |
| |
| JDMTrapCommunity TrapCommunity(): |
| { |
| Token t; |
| } |
| { |
| "trap-community" "=" t=<IDENTIFIER> { jjtThis.community= t.image; return jjtThis; } |
| } |
| |
| void TrapInterestedHost(): { } |
| { |
| "hosts" "=" HostTrap() ("," HostTrap())* |
| } |
| |
| void HostTrap() : |
| { |
| Token t; |
| } |
| { |
| HostName() |
| | |
| IpAddress() |
| | |
| IpV6Address() |
| } |
| |
| void Enterprise(): |
| { |
| Token t; |
| } |
| { |
| "{" |
| "enterprise" "=" t=<CSTRING> {jjtThis.enterprise= t.image;} |
| |
| "trap-num" "=" TrapNum() ("," TrapNum())* |
| |
| "}" |
| } |
| |
| void TrapNum(): |
| { |
| Token t; |
| } |
| { |
| t=<INTEGER_LITERAL> {jjtThis.low= Integer.parseInt(t.image);} |
| [ |
| "-" t=<INTEGER_LITERAL> {jjtThis.high= Integer.parseInt(t.image);} |
| ] |
| } |
| |
| |
| void InformBlock(): { } |
| { |
| "inform" "=" "{" (InformItem())* "}" |
| } |
| |
| void InformItem(): { } |
| { |
| "{" jjtThis.comm= InformCommunity() InformInterestedHost() "}" |
| } |
| |
| JDMInformCommunity InformCommunity(): |
| { |
| Token t; |
| } |
| { |
| "inform-community" "=" t=<IDENTIFIER> { jjtThis.community= t.image; return jjtThis; } |
| } |
| |
| void InformInterestedHost(): { } |
| { |
| "hosts" "=" HostInform() ("," HostInform())* |
| } |
| |
| void HostInform() : |
| { |
| Token t; |
| } |
| { |
| HostName() |
| | |
| IpAddress() |
| | |
| IpV6Address() |
| } |
| |