/******************************************************************************* * Copyright (c) 2015 Ericsson * * All rights reserved. This program and the accompanying materials are made * available under the terms of the Eclipse Public License v1.0 which * accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package org.eclipse.tracecompass.internal.ctf.core.event.metadata.tsdl; import org.antlr.runtime.tree.CommonTree; import org.eclipse.tracecompass.ctf.parser.CTFParser; import org.eclipse.tracecompass.internal.ctf.core.event.metadata.ICommonTreeParser; import org.eclipse.tracecompass.internal.ctf.core.event.metadata.ParseException; /** * Unary String Parser, along with Unary integer parser, one of the two most * used parsers in TSDL. Takes a basic node of the AST and converts it to a java * {@link String}.] * * @author Matthew Khouzam * */ public final class UnaryStringParser implements ICommonTreeParser { /** Instance */ public static final UnaryStringParser INSTANCE = new UnaryStringParser(); private UnaryStringParser() { } /** * Parses a unary string node and return the string value. * * @param unaryString * The unary string node to parse (type UNARY_EXPRESSION_STRING * or UNARY_EXPRESSION_STRING_QUOTES). * * @return The string value. * @throws ParseException * The tree node (unaryString) is not a unary string. */ /* * It would be really nice to remove the quotes earlier, such as in the * parser. */ @Override public String parse(CommonTree unaryString, ICommonTreeParserParameter notUsed) throws ParseException { CommonTree value = (CommonTree) unaryString.getChild(0); if (value.getType() == CTFParser.UNARY_EXPRESSION_STRING) { value = (CommonTree) value.getChild(0); } String strval = value.getText(); if (strval == null) { throw new ParseException("Unary String was null"); //$NON-NLS-1$ } /* Remove quotes */ if (unaryString.getType() == CTFParser.UNARY_EXPRESSION_STRING_QUOTES) { strval = strval.substring(1, strval.length() - 1); } return strval; } }