blob: bc27ddbc7721adca418744450d8e68d45c43aa73 (
plain)
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
|
# 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), 3 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.
|