Cobra Interactive Query Language display pattern matches

NAME

display patterns

SYNTAX

	dp help
	dp *
	dp [Setname *]
	dp [Setname *] n
	dp [Setname *] N M
	dp [Setname *] n N M
	dp filter file.c	# restrict output of dp to matches in file.c
	dp filter off		# remove filter on dp output

DESCRIPTION

This command is intended to be used to display or summarize the results of a pe pattern expression command.

The command-name can be followed by a * to print the contents of all currently defined pattern sets, or the name of a specific pattern set that was created earlier (either directly through a pe command, or seperately with the pattern set command ps. In this case the patterns displayed are taken from the named set only.
Use of the command without either a * or a setname implies that a pe command was used without targeting the output into a named set, leaving the set of matched patterns in the unnamed default location where it will be overwritten with each new search.
It is often useful to issue the command in 'terse' mode, to limit the number of lines printed per match.

With a single positive integer argument n, only the n-th match is displayed.
With two positive integer arguments N and M, all matching patterns of between N and M lines (inclusive) long are printed.
Finally, with three positive integer arguments n, N and M, only the n-th match within the length range given is printed.

The dp filter command can be used to define, or undefine, a filter on the output from dp commands, by restricting matches reported for only one specific file. By default this filter is off.

EXAMPLES

	$ cobra *.c	# Cobra source directory
	: # look for fct parameters used to index arrays without bounds checking
	: pe @type @ident ( .* x:@ident .* ) { ^:x* \( :x ^[> <] \)* ^:x* [ :x ] .* }
	2 patterns matched
	230 tokens marked
	: json
	[
	  { "type"      :       " ",
	    "message"   :       "lines 728..746",
	    "file"      :       "cobra_eval.c",
	    "line"      :       728,
	  },
	  { "type"      :       " ",
	    "message"   :       "lines 1317..1335",
	    "file"      :       "cobra_prog.c",
	    "line"      :       1317,
	  }
	]
	: dp 1			# print source for the first match (18 lines)
	cobra_eval.c:728..746
	bound var 'yyrule', line 732
	   728  static void
	   729  yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
	   730  {
	   731    unsigned long int yylno = yyrline[yyrule];
	>  732    int yynrhs = yyr2[yyrule];
	   733    int yyi;
	   734    YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
	   735               yyrule - 1, yylno);
	   736    /* The symbols being reduced.  */
	   737    for (yyi = 0; yyi < yynrhs; yyi++)
	   738      {
	   739        YYFPRINTF (stderr, "   $%d = ", yyi + 1);
	   740        yy_symbol_print (stderr,
	   741                         yystos[yyssp[yyi + 1 - yynrhs]],
	   742                         &(yyvsp[(yyi + 1) - (yynrhs)])
	   743                                                );
	   744        YYFPRINTF (stderr, "\n");
	   745      }
	   746  }
	: dp			# print source for all matches
	...
	: dp 1 18 18		# print only the first match of 10 lines long
	...			# produces the same output in this case
	: terse on		# switch to terse mode
	: dp			# print a terser summary of all matches
	cobra_eval.c:728..746
	bound var 'yyrule', line 732
	   728  static void
	   729  yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
	 ...
	   745      }
	   746  }
	cobra_prog.c:1317..1335
	bound var 'yyrule', line 1321
	  1317  static void
	  1318  yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
	 ...
	  1334      }
	  1335  }
	2 of 2 patterns printed
	: terse off		# turn off terse mode again
	: B cobra_prog.c 1317	# look at the context for the 2nd match
	: q			# quit
	$

NOTES

Starting with Cobra Version 4.2 (September 2022), entries from pattern sets can be suppressed from being displayed with a dp command by placing a special comment on the line where a matching pattern would start. The suppressing comment should contain the name of one or more pattern sets separated by spaces and preceded by the string @suppress which is preceded and followed by a single space. For example, this comment places on line 9 in cobra_cfg.c:
	#define Match(x)	(strcmp(cur->txt, x) == 0)	// @suppress Macros
prevents the warning from the pattern set named Macros in cobra query set rules/main/basic.cobra from being displayed.
If multiple pattern sets can match the line and all should be suppressed, the set-names can be listed, separated by spaces, as in:
	#define Match(x)	(strcmp(cur->txt, x) == 0)	// @suppress Params Macros

SEE ALSO

pattern searches, B browse source, pe pattern expressions, json, display, list, pre,

Return to index
Manual
Tutorial
(Last Updated: 13 September 2022)