QSP Syntax analyzer

Chimrod 5acc63c065 In the string expression simplification, only report the strings converted into strings 7 months ago
bin 1128450d0b Fixup in the --help message 7 months ago
documentation 234ce9447f Update documentation 8 months ago
lib 5acc63c065 In the string expression simplification, only report the strings converted into strings 7 months ago
test 5acc63c065 In the string expression simplification, only report the strings converted into strings 7 months ago
tools e8b746742f Update the compilation rule for git hash inclusion 8 months ago
.gitignore 97ab5c9a21 Moved qparser and syntax in the library folder 8 months ago
dune-project 5b42128cac Update readme 8 months ago
readme.md 5acc63c065 In the string expression simplification, only report the strings converted into strings 7 months ago

readme.md

QSP Syntax Parser

This tool is a syntax analyzer for the QSP Language. It contains a syntaxic parser able to read the QSP language, and allow some analysis over it.

The application does not use regexes, but translates the source qsp file using a grammar to represent each instruction.

Command line

qsp_parser.exe input_file
  --version     Display the version of the application and exit
  --list-tests  Print all the available tests then exit
  --level       Filter with this message level [debug, warn, error]
  --global      Each line is refered from the begining of the file and not the location
  -<test>       Disable this test
  +<test>       Enable this test
  -help         Display this list of options
  --help        Display this list of options     Display this list of options

You can run the application by giving in argument the file to analyze: the results will be printed in the standard output:

 qsp_parser.exe test.qsrc 
 Location test                         
 [{ level = Warn; loc = Line 3 19:27;
    message = "The type Integer is expected but got String" };
   { level = Debug; loc = Line 4 26:30;
     message = "The type Integer is expected but got String" };
   { level = Debug; loc = Line 5 8:45;
     message = "Possible dead end (no else fallback)" };
   { level = Warn; loc = Lines 13-15;
     message = "Possible dead end (unmatched path)" }
   ]
Found 0 error(s), 2 warning(s)

Checks provided

I will take this small code as example. The output of the analysis is given just above:

# test
                                                ! Warning here, $ARGS expect a string
if $ARGS[1] = 0 or $ARGS[1] = 1:
        act 'action':  value = '123'            &! value is a numeric variable
        if value = 2: act 'other': gt 'other'   &! Dead end here if value ≠ 2
else
        act 'Action2': gt 'arg', 'arg1'
end

act 'Go':
    if 0:
        act 'Leave': gt 'begin'
    else
        act 'Label': 'Action'                   &! Dead end here
    end
end

--- test ---------------------------------

Type checking

The QSP language uses explicit variable name for string or numeric values and you can easily spot when a string value is used instead of a numeric.

Dead end

By analysing the branchs, the application can spot the block where no gt instructions are given, which can lead to dead end in the code.

Escaped string

The application will report text strings containing only one expression with a debug message.

For example "<<$variable>>" can be written directly: $variable>. This test will not report this usage when an integer converted into a string this way.