001/*-------------------------------------------------------------------------+ 002| | 003| Copyright (c) 2009-2017 CQSE GmbH | 004| | 005+-------------------------------------------------------------------------*/ 006package eu.cqse.check.framework.shallowparser.languages.cobol; 007 008import java.util.List; 009 010import eu.cqse.check.framework.scanner.ETokenType; 011import eu.cqse.check.framework.scanner.IToken; 012import eu.cqse.check.framework.shallowparser.framework.ParserState; 013import eu.cqse.check.framework.shallowparser.framework.RecognizerBase; 014 015/** 016 * For Cobol scope statements with conditional clauses (e.g. WRITE), this 017 * recognizer helps to tell if the next token type is an explicit scope 018 * terminator or not. 019 */ 020public class ConditionalClauseWithEndScopeRecognizer extends RecognizerBase<ECobolParserState> { 021 022 /** Expected end token */ 023 private ETokenType expectedEndToken; 024 025 /** Constructor. */ 026 public ConditionalClauseWithEndScopeRecognizer(ETokenType endToken) { 027 this.expectedEndToken = endToken; 028 } 029 030 /** {@inheritDoc} */ 031 @Override 032 protected int matchesLocally(ParserState<ECobolParserState> parserState, List<IToken> tokens, int startOffset) { 033 if (tokens.size() == startOffset) { 034 return NO_MATCH; 035 } 036 037 if (tokens.get(startOffset).getType() == expectedEndToken) { 038 return super.matchesLocally(parserState, tokens, startOffset); 039 } 040 041 return NO_MATCH; 042 } 043 044}