]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.spreadsheet.common/src/expression.sablecc3
merged svn revision 33114 and added desktop and help plugins
[simantics/platform.git] / bundles / org.simantics.spreadsheet.common / src / expression.sablecc3
1 Package org.simantics.spreadsheet.common.expression;\r
2 \r
3 Helpers\r
4   letter = [['A'..'Z'] + ['a'..'z']];\r
5   digit = ['0'..'9'];\r
6   cr = 13;\r
7   lf = 10;\r
8   not_cr_lf = [[32..127] - [cr + lf]];\r
9   \r
10   harmless_char = [[32..127] - [''' + ['"' + '\']]];\r
11 \r
12   sq_str_char = harmless_char | '"';\r
13   dq_str_char = harmless_char | ''';\r
14 \r
15   sq_str_char_sequence = sq_str_char+;\r
16   dq_str_char_sequence = dq_str_char+;\r
17 \r
18   single_quote_string = ''' sq_str_char_sequence? ''';\r
19   double_quote_string = '"' dq_str_char_sequence? '"';\r
20  \r
21 Tokens\r
22   less_than = '<';\r
23   greater_than = '>';\r
24   equal = '=';\r
25 \r
26   plus = '+';\r
27   minus = '-';\r
28   mult = '*';\r
29   div = '/';\r
30   ampersand = '&';\r
31 \r
32   comma = ',';\r
33   colon = ':';\r
34   \r
35   l_par = '(';\r
36   r_par = ')';\r
37 \r
38   func = letter (letter | digit)* '(';\r
39   cell = '_'? letter+ digit+;\r
40   number = digit+ '.'* digit*;\r
41   string = single_quote_string | double_quote_string;  \r
42 \r
43   new_line = cr | lf | cr lf;\r
44 \r
45   blank = ' '*;\r
46 \r
47 Ignored Tokens\r
48   blank;\r
49 \r
50 Productions\r
51 \r
52   expression =\r
53     {mult} multiplicative |\r
54     {plus} [left]:expression plus [right]:multiplicative |\r
55         {minus} expression minus multiplicative;\r
56 \r
57   multiplicative =\r
58     {unary} unary |\r
59         {mult} [left]:multiplicative mult [right]:unary |\r
60         {div} [left]:multiplicative div [right]:unary;\r
61 \r
62   unary =\r
63         {primary} primary |\r
64         {unaryplus} plus unary |\r
65         {unaryminus} minus unary;\r
66 \r
67   arg_list = \r
68     {single} expression |\r
69     {sequence} arg_list comma expression;\r
70 \r
71   primary =     \r
72         {value} value |\r
73     {function} func arg_list? r_par;\r
74         \r
75   range =\r
76     {single} cell |\r
77     {multi} [left]:cell colon [right]:cell;\r
78         \r
79   value =\r
80     {string} string |\r
81     {constant} number |\r
82     {range} range |\r
83     {address} ampersand range |\r
84     {expr} l_par expression r_par;\r