1*b1cdbd2cSJim Jagielski# *************************************************************
2*b1cdbd2cSJim Jagielski#
3*b1cdbd2cSJim Jagielski#  Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski#  or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski#  distributed with this work for additional information
6*b1cdbd2cSJim Jagielski#  regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski#  to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski#  "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski#  with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski#
11*b1cdbd2cSJim Jagielski#    http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski#
13*b1cdbd2cSJim Jagielski#  Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski#  software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski#  KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski#  specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski#  under the License.
19*b1cdbd2cSJim Jagielski#
20*b1cdbd2cSJim Jagielski# *************************************************************
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim JagielskiBased on the C grammar for arithmetic expressions
23*b1cdbd2cSJim Jagielski=================================================
24*b1cdbd2cSJim Jagielski
25*b1cdbd2cSJim Jagielskinumber_digit = '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielskinumber_exponent = 'e'|'E'
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielskibasic_number = basic_number number_digit | number_digit
30*b1cdbd2cSJim Jagielski
31*b1cdbd2cSJim Jagielskinumber =
32*b1cdbd2cSJim Jagielski	   basic_number |
33*b1cdbd2cSJim Jagielski
34*b1cdbd2cSJim Jagielski	   basic_number number_exponent basic_number |
35*b1cdbd2cSJim Jagielski	   basic_number number_exponent '-' basic_number |
36*b1cdbd2cSJim Jagielski	   basic_number number_exponent '+' basic_number |
37*b1cdbd2cSJim Jagielski
38*b1cdbd2cSJim Jagielski	   '.' basic_number number_exponent basic_number |
39*b1cdbd2cSJim Jagielski	   '.' basic_number number_exponent '-' basic_number |
40*b1cdbd2cSJim Jagielski	   '.' basic_number number_exponent '+' basic_number |
41*b1cdbd2cSJim Jagielski
42*b1cdbd2cSJim Jagielski	   basic_number '.' number_exponent basic_number |
43*b1cdbd2cSJim Jagielski	   basic_number '.' number_exponent '-' basic_number |
44*b1cdbd2cSJim Jagielski	   basic_number '.' number_exponent '+' basic_number |
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski	   basic_number '.' basic_number number_exponent basic_number |
47*b1cdbd2cSJim Jagielski	   basic_number '.' basic_number number_exponent '-' basic_number |
48*b1cdbd2cSJim Jagielski	   basic_number '.' basic_number number_exponent '+' basic_number
49*b1cdbd2cSJim Jagielski
50*b1cdbd2cSJim Jagielski
51*b1cdbd2cSJim Jagielskiidentifier = '$'|'pi'|'e'|'X'|'Y'|'Width'|'Height'
52*b1cdbd2cSJim Jagielski              ^            ^   ^     ^       ^
53*b1cdbd2cSJim Jagielski              |            |   |     |       |
54*b1cdbd2cSJim Jagielski	 '$' in PPT            |   |     |       |
55*b1cdbd2cSJim Jagielski			 '#ppt_x' in PPT   |     |       |
56*b1cdbd2cSJim Jagielski			     '#ppt_y' in PPT     |       |
57*b1cdbd2cSJim Jagielski				       '#ppt_w' in PPT       |
58*b1cdbd2cSJim Jagielski                               '#ppt_h' in PPT
59*b1cdbd2cSJim Jagielski
60*b1cdbd2cSJim Jagielskiunary_function = 'abs'|'sqrt'|'sin'|'cos'|'tan'|'atan'|'acos'|'asin'|'exp'|'log'
61*b1cdbd2cSJim Jagielskibinary_function = 'min'|'max'
62*b1cdbd2cSJim Jagielski
63*b1cdbd2cSJim Jagielski
64*b1cdbd2cSJim Jagielskibasic_expression =
65*b1cdbd2cSJim Jagielski				 number |
66*b1cdbd2cSJim Jagielski				 identifier |
67*b1cdbd2cSJim Jagielski				 unary_function '(' additive_expression ')' |
68*b1cdbd2cSJim Jagielski				 binary_function '(' additive_expression ',' additive_expression ')' |
69*b1cdbd2cSJim Jagielski				 '(' additive_expression ')'
70*b1cdbd2cSJim Jagielski
71*b1cdbd2cSJim Jagielskiunary_expression = '-' basic_expression
72*b1cdbd2cSJim Jagielski
73*b1cdbd2cSJim Jagielskimultiplicative_expression =
74*b1cdbd2cSJim Jagielski						  basic_expression |
75*b1cdbd2cSJim Jagielski						  multiplicative_expression '*' basic_expression |
76*b1cdbd2cSJim Jagielski						  multiplicative_expression '/' basic_expression
77*b1cdbd2cSJim Jagielski
78*b1cdbd2cSJim Jagielskiadditive_expression =
79*b1cdbd2cSJim Jagielski					multiplicative_expression |
80*b1cdbd2cSJim Jagielski					additive_expression '+' multiplicative_expression |
81*b1cdbd2cSJim Jagielski					additive_expression '-' multiplicative_expression
82*b1cdbd2cSJim Jagielski
83