All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gov.nist.core.ParserCore Maven / Gradle / Ivy

There is a newer version: 1.3.0-91
Show newest version
/*
* Conditions Of Use
*
* This software was developed by employees of the National Institute of
* Standards and Technology (NIST), an agency of the Federal Government.
* Pursuant to title 15 Untied States Code Section 105, works of NIST
* employees are not subject to copyright protection in the United States
* and are considered to be in the public domain.  As a result, a formal
* license is not needed to use the software.
*
* This software is provided by NIST as a service and is expressly
* provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
* AND DATA ACCURACY.  NIST does not warrant or make any representations
* regarding the use of the software or the results thereof, including but
* not limited to the correctness, accuracy, reliability or usefulness of
* the software.
*
* Permission to use this software is contingent upon your acceptance
* of the terms of this agreement
*
* .
*
*/
package gov.nist.core;

import java.text.ParseException;

/** Generic parser class.
* All parsers inherit this class.
*
*@version 1.2
*
*@author M. Ranganathan   
* * * */ public abstract class ParserCore { public static final boolean debug = Debug.parserDebug; static int nesting_level; protected LexerCore lexer; protected NameValue nameValue(char separator) throws ParseException { if (debug) dbg_enter("nameValue"); try { lexer.match(LexerCore.ID); Token name = lexer.getNextToken(); // eat white space. lexer.SPorHT(); try { boolean quoted = false; char la = lexer.lookAhead(0); if (la == separator ) { lexer.consume(1); lexer.SPorHT(); String str = null; boolean isFlag = false; char c = lexer.lookAhead(0); if (c == '\"') { str = lexer.quotedString(); quoted = true; } else if (c == '['){ lexer.match(LexerCore.IPV6); Token value = lexer.getNextToken(); str = value.tokenValue; // JvB: flag parameters must be empty string! if (str==null) { str = ""; isFlag = true; } }else { lexer.match(LexerCore.ID); Token value = lexer.getNextToken(); str = value.tokenValue; // JvB: flag parameters must be empty string! if (str==null) { str = ""; isFlag = true; } } NameValue nv = new NameValue(name.tokenValue,str,isFlag); if (quoted) nv.setQuotedValue(); return nv; } else { // JvB: flag parameters must be empty string! return new NameValue(name.tokenValue,"",true); } } catch (ParseException ex) { return new NameValue(name.tokenValue,null,false); } } finally { if (debug) dbg_leave("nameValue"); } } protected void dbg_enter(String rule) { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < nesting_level ; i++) stringBuilder.append(">"); if (debug) { System.out.println( stringBuilder + rule + "\nlexer buffer = \n" + lexer.getRest()); } nesting_level++; } protected void dbg_leave(String rule) { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < nesting_level ; i++) stringBuilder.append("<"); if (debug) { System.out.println( stringBuilder + rule + "\nlexer buffer = \n" + lexer.getRest()); } nesting_level --; } protected NameValue nameValue() throws ParseException { return nameValue('='); } protected void peekLine(String rule) { if (debug) { Debug.println(rule +" " + lexer.peekLine()); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy