QSP Syntax analyzer

Chimrod 2cad3abf18 Updated the type checker in a more precise way 1 rok pred
bin 0b75cd5bc0 Used the dead-end checker in main analysis 1 rok pred
documentation 234ce9447f Update documentation 1 rok pred
lib 2cad3abf18 Updated the type checker in a more precise way 1 rok pred
test 73e7e0ca6b Updated the tests 1 rok pred
tools e8b746742f Update the compilation rule for git hash inclusion 1 rok pred
.gitignore 97ab5c9a21 Moved qparser and syntax in the library folder 1 rok pred
dune-project 5b42128cac Update readme 1 rok pred
readme.md 8101e3d393 Update the readme 1 rok pred

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
  --level    Message level [debug, warn, error]
  --global   Each line is refered from the begining of the file and not the
             location
  -help      Display this list of options
  --help     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.