aboutsummaryrefslogtreecommitdiff
path: root/readme.md
blob: d18b3712762971e55f3be174e7b8ac05d18d0ed2 (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
73
74
75
76
77
78
79
80
# 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>`.