Chimrod 2cad3abf18 Updated the type checker in a more precise way | 1 jaar geleden | |
---|---|---|
bin | 1 jaar geleden | |
documentation | 1 jaar geleden | |
lib | 1 jaar geleden | |
test | 1 jaar geleden | |
tools | 1 jaar geleden | |
.gitignore | 1 jaar geleden | |
dune-project | 1 jaar geleden | |
readme.md | 1 jaar geleden |
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.
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)
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 ---------------------------------
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.
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.