Arithmetic.ebnf 1.75 KB
Newer Older
eckhart's avatar
eckhart committed
1
2
3
4
5
6
7
8
# Arithmetic-grammar

#######################################################################
#
#  EBNF-Directives
#
#######################################################################

9
10
11
12
13
@ whitespace  = vertical           # implicit whitespace, includes any number of line feeds
@ literalws   = right              # literals have implicit whitespace on the right hand side
@ comment     = /#.*/              # comments range from a '#'-character to the end of the line
@ ignorecase  = False              # literals and regular expressions are case-sensitive
@ drop        = whitespace, token  # drop anonymous whitespace
eckhart's avatar
eckhart committed
14

15

eckhart's avatar
eckhart committed
16
17
#######################################################################
#
18
#: Expressions
eckhart's avatar
eckhart committed
19
20
21
#
#######################################################################

22
23
24
25
expression     = addition | subtraction | term
addition       = (term "+" (addition|term)) | (subtraction "+" term)
subtraction    = expression "-" term

eckhart's avatar
eckhart committed
26
27
28

#######################################################################
#
29
#: Terms
eckhart's avatar
eckhart committed
30
31
32
#
#######################################################################

33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
term           = multiplication | division | factor
multiplication = factor ["*"] term
division       = term "/" (multiplication | factor)


#######################################################################
#
#: Factors
#
#######################################################################

factor         = [sign] ( NUMBER | VARIABLE | group )
sign           = PLUS | MINUS
group          = "(" §expression ")"


#######################################################################
#
#: Tokens
#
#######################################################################
54

55
56
PLUS       = /\+/
MINUS      = /-/
eckhart's avatar
eckhart committed
57
58
NUMBER     = /(?:0|(?:[1-9]\d*))(?:\.\d+)?/~
VARIABLE   = /[A-Za-z]/~