code: @Override
      protected void parseDataDefinition(StreamTokenizer streamTokenizer) throws FSMParseException, IOException {
          if (acceptIndex == -1 && acceptValue == -1) {
  
              // check we will read an identifier.
              if (streamTokenizer.nextToken() != StreamTokenizer.TT_WORD) {
                  throw new FSMParseException(EXPECT_IDENTIFIER, streamTokenizer);
              }
  
              final String dataVariableName = streamTokenizer.sval;
  
              if (dataVariableName.equals(acceptingDataVariableName)) {
                  acceptIndex = getPartLineNumber();
  
                  // skip a (
                  if (streamTokenizer.nextToken() != '(') {
                      throw new FSMParseException(String.format(EXPECT_CHAR, '('), streamTokenizer);
                  }
  
                  // skip a number
                  if (streamTokenizer.nextToken() != StreamTokenizer.TT_WORD) {
                      throw new FSMParseException(EXPECT_NUMBER, streamTokenizer);
                  }
  
                  // skip a )
                  if (streamTokenizer.nextToken() != ')') {
                      throw new FSMParseException(String.format(EXPECT_CHAR, ')'), streamTokenizer);
                  }
  
                  // skip an identifier
                  if (streamTokenizer.nextToken() != StreamTokenizer.TT_WORD) {
                      throw new FSMParseException(EXPECT_IDENTIFIER, streamTokenizer);
                  }
  
                  int dataValueIndex = 0;
  
                  // find the string containing the acceptance information
                  while (streamTokenizer.nextToken() == '"' && acceptValue == -1) {
                      final String dataValue = streamTokenizer.sval;
                      if (dataValue.equals(acceptingDataValue)) {
                          acceptValue = dataValueIndex;
                      } else {
                          dataValueIndex++;
                      }
                  }
                  // push back the EOL, or EOF we accidentally read
                  streamTokenizer.pushBack();
  
                  // throw an Exception when the string containing acceptance information is not found in the current line
                  if (acceptValue == -1) {
                      throw new FSMParseException(String.format(ACCEPT_VALUE_NOT_FOUND, acceptingDataValue),
                                                  streamTokenizer);
                  }
              }
          }
      }
docs: Parse a data definition.
  <p>
  This line is only parsed when we still have to find {@link #acceptIndex}, and {@link #acceptValue}.
  
  @throws FSMParseException
  when the data definition is illegal.
  @throws IOException
  see {@link StreamTokenizer#nextToken()}.