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
|
# 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.
In this way, the application is able to :
1. Point out an error in the source code, indicating the line that could not be
translated.
2. Perform operations on the file representation.
## Reading QSP
The QSP language was not designed to be processed in this way. There are
ambivalent cases that cannot be represented cleanly via a grammar.
An example is the `!` character, which can indicate the start of a comment, or
an inequality operator.
Another example is the `*` character, which can be the first character of an
instruction, or a multiplication operation. For example:
- `*clr()` is a valid instruction, but `5 *clr()` is not.
- `*rnd()` is an invalid instruction, but `5 *rnd()` is valid.
(As a bonus `rnd* rnd()` is also valid…)
What's more, the language is very permissive, allowing for structures that are
actually incorrect.
For example:
```
if $PARGS[0] = 'Day1':
end
elseif $ARGS[0] = 'Week1':
end
```
As a result, the application may pick up errors on particular cases that are
nonetheless valid. I've tried to respect the syntax of the QSP language as much
as possible, but on borderline cases, I consider that being stricter is
positive.
|