/******************************************************************************* * Copyright (c) 2008 SAP * see https://research.qkal.sap.corp/mediawiki/index.php/CoMONET * * Date: $Date: 2009-10-13 10:41:07 +0200 (Di, 13 Okt 2009) $ * @version $Revision: 8285 $ * @author: $Author: d043530 $ *******************************************************************************/ package com.sap.furcas.parsergenerator.tcs.t2m.grammar; import java.util.Collection; import java.util.Iterator; import com.sap.furcas.metamodel.FURCAS.TCS.Alternative; import com.sap.furcas.metamodel.FURCAS.TCS.SequenceInAlternative; import com.sap.furcas.runtime.common.exceptions.MetaModelLookupException; import com.sap.furcas.runtime.parser.exceptions.SyntaxParsingException; /** * The Class AlternativeHandler. */ public class AlternativeHandler { /** * Adds the element. * * @param alternativeSeqEl the element * @param buffer the buffer * * @throws SyntaxParsingException the syntax parsing exception * @throws MetaModelLookupException the meta model lookup exception */ public void addElement(Alternative alternativeSeqEl, RuleBodyStringBuffer buffer) throws MetaModelLookupException { Collection<SequenceInAlternative> seqs = alternativeSeqEl.getSequences(); if (seqs == null || seqs.size() == 0) { return; } // if (alternativeSeqEl.isMulti()) { // throw new SyntaxElementException("Multi-Alternatives not supported yet", alternativeSeqEl); // } int alternative = 0; buffer.append('('); for (Iterator<SequenceInAlternative> iterator = seqs.iterator(); iterator.hasNext();) { SequenceInAlternative sequence = iterator.next(); if(sequence.getDisambiguate() != null) { //append disambiguation as syntactic predicate buffer.append("("); buffer.append(sequence.getDisambiguate()); buffer.append(") => "); } ObservationDirectivesHelper.appendEnterAlternativeNotification(buffer, alternative); buffer.addToRuleFragment(sequence); ObservationDirectivesHelper.appendExitAlternativeNotification(buffer); if (iterator.hasNext()) { buffer.append("\n |"); } alternative++; } buffer.append(')'); if (alternativeSeqEl.isIsMulti()) { buffer.append('*'); } } }