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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# 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)
### Return code
The application will return the code `0` when all the tests are passed without
errors, warnings or debug report and `1` otherwise.
## 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.
### Duplicated test
In a single if branch, check if the same is repeated more than one once. In
this case, only the first case is executed and the other test is ignored.
A warning will be raised here:
if $value = '1':
! Do something
elseif $value = '1':
! Do something else
end
|