initial commit: test grammars + tooling
This commit is contained in:
commit
0419693b04
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
test-grammars/*.json
|
||||||
|
test-grammars/*.dot
|
||||||
|
test-grammars/*.pdf
|
||||||
|
test-grammars/*.png
|
3
README.md
Normal file
3
README.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# recipies parser
|
||||||
|
|
||||||
|
Parsing grammars requires the `pegasus` software: https://github.com/DanilaFe/pegasus
|
44
build.sh
Executable file
44
build.sh
Executable file
@ -0,0 +1,44 @@
|
|||||||
|
#/bin/sh
|
||||||
|
|
||||||
|
BINDIR=../pegasus/bin/
|
||||||
|
|
||||||
|
tokenfile=$1
|
||||||
|
TMPERRORFILE="/tmp/TMPERRORFILE$$"
|
||||||
|
|
||||||
|
on_error()
|
||||||
|
{
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
err=$1
|
||||||
|
echo $err
|
||||||
|
cat ${TMPERRORFILE}
|
||||||
|
rm ${TMPERRORFILE}
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
val=`wc -l ${TMPERRORFILE} | cut -d ' ' -f 1`
|
||||||
|
if [ ${val} -ne 0 ]; then
|
||||||
|
echo $err
|
||||||
|
cat ${TMPERRORFILE}
|
||||||
|
rm ${TMPERRORFILE}
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "usage $0 token-and-rules-file"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "pegasus reading the grammar"
|
||||||
|
${BINDIR}/pegasus < "${tokenfile}" > "${tokenfile}.json" 2>${TMPERRORFILE}
|
||||||
|
on_error "cannot read the grammar"
|
||||||
|
|
||||||
|
echo "pegasus creating a dot file"
|
||||||
|
${BINDIR}/pegasus-dot < "${tokenfile}.json" > "${tokenfile}.dot"
|
||||||
|
# echo VAL RET $?
|
||||||
|
on_error "cannot create the dot file"
|
||||||
|
|
||||||
|
echo "pegasus trying an example on the generated parser"
|
||||||
|
cat "${tokenfile}.example" | ${BINDIR}/pegasus-sim -i "${tokenfile}.json"
|
||||||
|
# echo VAL RET $?
|
||||||
|
on_error "cannot parse the example"
|
46
test-grammars/graph-this.sh
Executable file
46
test-grammars/graph-this.sh
Executable file
@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [ "$FONT" = "" ]
|
||||||
|
then
|
||||||
|
FONT=/usr/share/fonts/truetype/ubuntu-font-family/UbuntuMono-R.ttf
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "font : $FONT"
|
||||||
|
|
||||||
|
# $1 = program, $2 = filename extension
|
||||||
|
function graphit()
|
||||||
|
{
|
||||||
|
PROG=$1
|
||||||
|
FNEXT=$2
|
||||||
|
ls *.$FNEXT 2>/dev/null 1>&2
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
for i in *\.$FNEXT
|
||||||
|
do
|
||||||
|
PDF=$(echo ${i} | sed "s/$FNEXT$/pdf/")
|
||||||
|
if [ ! -f ${PDF} ] || [ $(stat -c "%X" ${PDF}) -lt $(stat -c "%X" ${i}) ]
|
||||||
|
then
|
||||||
|
|
||||||
|
PROGOPT="-Tpdf"
|
||||||
|
case $PROG in
|
||||||
|
"seqdiag" | "packetdiag" | "nwdiag")
|
||||||
|
PROGOPT="$PROGOPT -a -f $FONT"
|
||||||
|
echo ${PROG} ${PROGOPT} ${i}
|
||||||
|
${PROG} ${PROGOPT} ${i}
|
||||||
|
;;
|
||||||
|
"dot")
|
||||||
|
echo "${PROG} ${PROGOPT} ${i} > ${PDF}"
|
||||||
|
${PROG} ${PROGOPT} ${i} > ${PDF}
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo touch ${PDF}
|
||||||
|
touch ${PDF}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
graphit "seqdiag" "diag"
|
||||||
|
graphit "packetdiag" "pktdiag"
|
||||||
|
graphit "nwdiag" "nwdiag"
|
||||||
|
graphit "dot" "dot"
|
11
test-grammars/tokens
Normal file
11
test-grammars/tokens
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
token cr = /\n/;
|
||||||
|
token eq = /=/;
|
||||||
|
token space = /[ \t]+/;
|
||||||
|
token recipiename = /@[a-zA-Z0-9\.\-]+/;
|
||||||
|
token actionname = /(build|version|depends)/;
|
||||||
|
token actionvalue = /"[a-zA-Z0-9 \-_]+"/;
|
||||||
|
|
||||||
|
rule document = recipe cr document | recipe | cr;
|
||||||
|
rule recipe = recipiename cr myrules;
|
||||||
|
rule myrules = myrule cr myrules | cr;
|
||||||
|
rule myrule = actionname eq actionvalue;
|
4
test-grammars/tokens.example
Normal file
4
test-grammars/tokens.example
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
@test1234
|
||||||
|
build="the thing to do"
|
||||||
|
version="1"
|
||||||
|
depends="nothing"
|
Reference in New Issue
Block a user