Software Open Access

Artifact for the OOPSLA'20 paper "Regex Matching with Counting-Set Automata"

Lukáš Holík; Ondřej Lengál; Olli Saarikivi; Lenka Turoňová; Margus Veanes; Tomáš Vojnar

DataCite XML Export

<?xml version='1.0' encoding='utf-8'?>
<resource xmlns:xsi="" xmlns="" xsi:schemaLocation="">
  <identifier identifierType="DOI">10.5281/zenodo.3975566</identifier>
      <creatorName>Lukáš Holík</creatorName>
      <nameIdentifier nameIdentifierScheme="ORCID" schemeURI="">0000-0001-6957-1651</nameIdentifier>
      <affiliation>Brno University of Technology</affiliation>
      <creatorName>Ondřej Lengál</creatorName>
      <nameIdentifier nameIdentifierScheme="ORCID" schemeURI="">0000-0002-3038-5875</nameIdentifier>
      <affiliation>Brno University of Technology</affiliation>
      <creatorName>Olli Saarikivi</creatorName>
      <nameIdentifier nameIdentifierScheme="ORCID" schemeURI="">0000-0001-7596-4734</nameIdentifier>
      <affiliation>Microsoft Research</affiliation>
      <creatorName>Lenka Turoňová</creatorName>
      <affiliation>Brno University of Technology</affiliation>
      <creatorName>Margus Veanes</creatorName>
      <affiliation>Microsoft Research</affiliation>
      <creatorName>Tomáš Vojnar</creatorName>
      <nameIdentifier nameIdentifierScheme="ORCID" schemeURI="">0000-0002-2746-8792</nameIdentifier>
      <affiliation>Brno University of Technology</affiliation>
    <title>Artifact for the OOPSLA'20 paper "Regex Matching with Counting-Set Automata"</title>
    <subject>regular expression</subject>
    <subject>repetition operator</subject>
    <subject>finite automaton</subject>
    <subject>symbolic automaton</subject>
    <subject>counting-set automaton</subject>
    <date dateType="Issued">2020-08-07</date>
  <resourceType resourceTypeGeneral="Software"/>
    <alternateIdentifier alternateIdentifierType="url"></alternateIdentifier>
    <relatedIdentifier relatedIdentifierType="DOI" relationType="IsVersionOf">10.5281/zenodo.3975565</relatedIdentifier>
    <rights rightsURI="">MIT License</rights>
    <rights rightsURI="info:eu-repo/semantics/openAccess">Open Access</rights>
    <description descriptionType="Abstract">&lt;p&gt;&lt;strong&gt;Artifact for the paper &amp;quot;Regex Matching with Counting-Set Automata&amp;quot; (OOPSLA&amp;#39;20)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is an artifact for the paper &amp;quot;Regex Matching with Counting-Set Automata&amp;quot; at OOPSLA&amp;#39;20.&lt;/p&gt;

&lt;p&gt;This artifact is supposed to be run on the virtual machine Artifact Evaluation VM - Ubuntu 18.04 LTS available at&amp;nbsp;&lt;a href=""&gt;;/a&gt;&amp;nbsp;. The recommended virtualization software is VirtualBox (we used version 6.1.12).&lt;/p&gt;

&lt;p&gt;Please make sure to have at least 30 GiB allocated on your computer for the VM (the disc image will grow automatically). Let us warn you that running the (full) experiments on 1 CPU may take a time in the order of tens of hours and may cause your computer (in particular a laptop) to get hot (possibly overheat and turn off).&lt;/p&gt;

&lt;p&gt;Note: see the file&amp;nbsp;&lt;code&gt;~/howto_vbox_shared_folder.txt&lt;/code&gt;&amp;nbsp;on how to set up a shared folder between the host and the guest OS (it is simple). It can make transferring of files from/to the VM easier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Getting Started&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Preparing VM&lt;/strong&gt;&lt;/p&gt;

	&lt;li&gt;Download the VM from&amp;nbsp;&lt;a href=""&gt;;/a&gt;&amp;nbsp;and import it into VirtualBox (we recommend at least 8 GiB of memory per CPU (4 GiB might also work, though some experiments may terminate sooner due to out-of-memory) --- if you allocate more CPUs, the benchmarks will run in parallel ; it is also a good idea not to do other demanding things on your host OS while the experiments are runnning, otherwise the OSes will be fighting for RAM).&lt;/li&gt;
	&lt;li&gt;Start the VM, turn on Terminal (in the left bar), enable network connection, and download the artifact zip file.&lt;/li&gt;


	&lt;li&gt;Start the VM, turn on Terminal (in the left bar) and mount the shared folder according to&amp;nbsp;&lt;code&gt;~/howto_vbox_shared_folder.txt&lt;/code&gt;.&lt;/li&gt;
	&lt;li&gt;Copy the artifact zip file from the shared folder to&amp;nbsp;&lt;code&gt;$HOME&lt;/code&gt;. Then run the following:&lt;/li&gt;

&lt;pre&gt;&lt;code&gt;unzip &amp;lt;artifact&amp;gt;.zip
cd &amp;lt;artifact&amp;gt;/

&lt;p&gt;&lt;strong&gt;Installing Packages&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to the root directory of the artifact and run&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo ./

&lt;p&gt;(the&amp;nbsp;&lt;code&gt;sudo&lt;/code&gt;&amp;nbsp;password is &amp;quot;&lt;code&gt;ae&lt;/code&gt;&amp;quot;)&lt;/p&gt;

&lt;p&gt;Take a walk (~20 minutes).&lt;/p&gt;

&lt;p&gt;There might be some issues reported with installing some packages (some nasty stuff happens due to the need to update&amp;nbsp;&lt;code&gt;libc&lt;/code&gt;). The issues should not matter, since the installed tools can be used.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Preparing the Benchmarks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Download the dataset from&amp;nbsp;&lt;a href=""&gt;;/a&gt;&amp;nbsp;, unzip it and copy to the right location (you may need to enable network connection).&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;wget '' -O
mv benchmark-cnt-set-automata/bench/* run/

&lt;p&gt;&lt;strong&gt;Kicking the Tires&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The following sequence of commands should check that everything is working and run a small subset of experiments, and generate a preliminary report.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd run/
./               (prepares short version of experiments)
(take a walk ~20 mins)
cd ../results
firefox results.html

&lt;p&gt;You should see a web page with incomplete results of the experiments (consider increasing the resolution of the VM).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step by Step Instructions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Running the Full Experiments&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd run/

&lt;p&gt;Take a long walk (possibly a trip Paris or any other place that you have always wanted to visit --- this may take a few tens of hours, based on your setup, so you may even manage to leave the quarantine before the experiments finish ;-) --- seriously, it might take two or three days ; you can, however, save the state of the VM and restore it later to continue with the experiments). You can change the timeout in&amp;nbsp;&lt;code&gt;run/;/code&gt;&amp;nbsp;to obtain partial results faster or remove some lines from&amp;nbsp;&lt;code&gt;run/bench-*.txt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Processing the Results of Experiments&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before viewing the results, we recommend to change the resolution of the VM to a higher one.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(in run/)

cd ../results/
firefox results.html

&lt;p&gt;&lt;strong&gt;Supported Claims&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The artifact reproduces the following parts of the paper:&lt;/p&gt;

	&lt;li&gt;Fig. 5&lt;/li&gt;
	&lt;li&gt;Table 1&lt;/li&gt;

&lt;p&gt;Since the machine running the artifact will most probably differ from the one we used to run the experiments, exact times, numbers of timeouts, etc. will most probably differ, but the trends should stay the same.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Extra Notes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing Outside of the Provided VM&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It should not be difficult to set up the environment on a Linux OS reasonably close to the one in the referenced VM. The needed Linux packages are&lt;/p&gt;

mono (version at least 5.*)

&lt;p&gt;Python packages:&lt;/p&gt;


&lt;p&gt;R packages:&lt;/p&gt;


&lt;p&gt;You can follow the commands in the&amp;nbsp;&lt;a href=""&gt;installation script&lt;/a&gt;&amp;nbsp;to see what needs to be done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Running Other Experiments&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The experiments to run are stored in the&amp;nbsp;&lt;code&gt;run/bench-*.txt&lt;/code&gt;&amp;nbsp;files, in a CSV-like format&amp;nbsp;&lt;code&gt;pattern;input-file&lt;/code&gt;&amp;nbsp;where&amp;nbsp;&lt;code&gt;pattern&lt;/code&gt;&amp;nbsp;can use escape characters as used in CSVs (compatible with Python&amp;#39;s&amp;nbsp;&lt;code&gt;csv&lt;/code&gt;&amp;nbsp;module). If you have a file&amp;nbsp;&lt;code&gt;FILE&lt;/code&gt;&amp;nbsp;with your own benchmarks, you can run the following command in the&amp;nbsp;&lt;code&gt;run/&lt;/code&gt;&amp;nbsp;directory:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cat FILE | ./pycobench -t TIMEOUT -o OUTPUT pattern_match.yaml

&lt;p&gt;where&amp;nbsp;&lt;code&gt;TIMEOUT&lt;/code&gt;&amp;nbsp;is the timeout (in seconds) and&amp;nbsp;&lt;code&gt;OUTPUT&lt;/code&gt;&amp;nbsp;is a file that logs results of experiments. See&amp;nbsp;&lt;code&gt;./pycobench -h&lt;/code&gt;&amp;nbsp;for more details.&amp;nbsp;&lt;code&gt;./pycobench&lt;/code&gt;&amp;nbsp;by default runs every benchmark (i.e. a line in&amp;nbsp;&lt;code&gt;FILE&lt;/code&gt;) with all regex matchers as defined in&amp;nbsp;&lt;code&gt;run/pattern_match.yaml&lt;/code&gt;&amp;nbsp;(the default definition runs them in the mode where they count the number of matching lines).&lt;/p&gt;

&lt;p&gt;When the command finishes, you need to process the output to collect the runtimes and numbers of matches to a format where there is single line for every benchmarks using the following commands:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cat OUTPUT | ./ | ./ &amp;gt; results.csv

&lt;p&gt;You can import the resulting CSV file in a spreadsheet editor. Note that there might be some problems with delimiters (such as &amp;quot;;&amp;quot; in the regexes), so you might first consider sanitizing the CSV to get rid of regexes by the&amp;nbsp;&lt;code&gt;./;/code&gt;&amp;nbsp;script.&lt;/p&gt;</description>
All versions This version
Views 214214
Downloads 4141
Data volume 12.0 GB12.0 GB
Unique views 184184
Unique downloads 3838


Cite as