about summary refs log tree commit diff
path: root/custom_mutators/gramatron/preprocess/prep_automaton.sh
blob: 28d99fb0fe0da8957c950ea8699f40b2b67e6e82 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/bash

# This script creates a FSA describing the input grammar *.g4

if [ ! "$#" -lt 4 ]; then
  echo "Usage: ./prep_pda.sh <grammar_file> <start> [stack_limit]"         
  exit 1
fi

GRAMMAR_FILE=$1
GRAMMAR_DIR="$(dirname $GRAMMAR_FILE)"
START="$2"
STACK_LIMIT="$3"

# Get filename
FILE=$(basename -- "$GRAMMAR_FILE")
echo "File:$FILE"
FILENAME="${FILE%.*}"
echo "Name:$FILENAME"


# Create the GNF form of the grammar
CMD="python gnf_converter.py --gf $GRAMMAR_FILE --out ${FILENAME}.json --start $START"
$CMD

# Generate grammar automaton 
# Check if user provided a stack limit
if [ -z "${STACK_LIMIT}" ]; then
CMD="python3 construct_automata.py --gf ${FILENAME}.json" 
else
CMD="python construct_automata.py --gf ${FILENAME}.json --limit ${STACK_LIMIT}" 
fi
echo $CMD
$CMD

# Move PDA to the source dir of the grammar
echo "Copying ${FILENAME}_automata.json to $GRAMMAR_DIR"
mv "${FILENAME}_automata.json" $GRAMMAR_DIR/