class_docstr: Initializes a BIFReader object.
  
  Parameters
  ----------
  path : file or str
      File of bif data
  
  string : str
      String of bif data
  
  include_properties: boolean
      If True, gets the properties tag from the file and stores in graph properties.
  
  n_jobs: int (default: -1)
      Number of jobs to run in parallel. `-1` means use all processors.
  
  Examples
  --------
  # dog-problem.bif file is present at
  # http://www.cs.cmu.edu/~javabayes/Examples/DogProblem/dog-problem.bif
  >>> from pgmpy.readwrite import BIFReader
  >>> reader = BIFReader("bif_test.bif")
  <pgmpy.readwrite.BIF.BIFReader object at 0x7f2375621cf8>
  >>> model = reader.get_model()
  
  Reference
  ---------
  [1] Geoff Hulten and Pedro Domingos. The interchange format for bayesian networks.
      http://www.cs.washington.edu/dm/vfml/appendixes/bif.htm, 2003.
docstr: A method that returns probability grammar
code: def get_probability_grammar(self):
      """
      A method that returns probability grammar
      """
      # Creating valid word expression for probability, it is of the format
      # wor1 | var2 , var3 or var1 var2 var3 or simply var
      word_expr = (
          Word(pp.unicode.alphanums + "-" + "_")
          + Suppress(Optional("|"))
          + Suppress(Optional(","))
      )
      word_expr2 = Word(
          initChars=printables, excludeChars=[",", ")", " ", "("]
      ) + Suppress(Optional(","))
      # creating an expression for valid numbers, of the format
      # 1.00 or 1 or 1.00. 0.00 or 9.8e-5 etc
      num_expr = Word(nums + "-" + "+" + "e" + "E" + ".") + Suppress(
          Optional(",")
      )
      probability_expr = (
          Suppress("probability")
          + Suppress("(")
          + OneOrMore(word_expr)
          + Suppress(")")
      )
      optional_expr = (
          Suppress("(") + OneOrMore(word_expr2) + Suppress(")")
      )
      probab_attributes = (
          optional_expr | Suppress("table") | Suppress("default")
      )
      cpd_expr = probab_attributes + OneOrMore(num_expr)
  
      return probability_expr, cpd_expr
  
imports: import collections
  import re
  from copy import copy
  from itertools import product
  from string import Template
  import numpy
  import pyparsing
  from joblib import Parallel, delayed
  from pyparsing import CharsNotIn, Group, OneOrMore, Optional, Suppress, Word, ZeroOrMore, alphanums, cppStyleComment, nums, printables
  from pgmpy.factors.discrete import TabularCPD
  from pgmpy.models import BayesianNetwork
  from pgmpy.utils import compat_fns
label_desc: Use image node_id 3 for calling the BIFReader obj's underlying member method code with example usage: obj.get_probability_grammar() and returns: probability_expr,  cpd_expr