]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.basicexpression/src/expression.sablecc3
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.basicexpression / src / expression.sablecc3
1 Package org.simantics.basicexpression;\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..255] - [cr + lf]];\r
9   \r
10   harmless_char = [[32..255] - [''' + ['"' + '\']]];\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   variable = letter (letter | digit)*;\r
39   func = letter (letter | digit)* '(';\r
40   cell = '_'? letter+ digit+;\r
41   rvi = ('.')* ('/' | '#') ('/' | '#' | '.' | letter | digit | '_')*;\r
42   number = digit+ '.'* digit*;\r
43   string = single_quote_string | double_quote_string;  \r
44 \r
45   new_line = cr | lf | cr lf;\r
46 \r
47   blank = ' '*;\r
48 \r
49 Ignored Tokens\r
50   blank;\r
51 \r
52 Productions\r
53 \r
54   expression =\r
55     {mult} multiplicative |\r
56     {plus} [left]:expression plus [right]:multiplicative |\r
57         {minus} expression minus multiplicative;\r
58 \r
59   multiplicative =\r
60     {unary} unary |\r
61         {mult} [left]:multiplicative mult [right]:unary |\r
62         {div} [left]:multiplicative div [right]:unary;\r
63 \r
64   unary =\r
65         {primary} primary |\r
66         {unaryplus} plus unary |\r
67         {unaryminus} minus unary;\r
68 \r
69   arg_list = \r
70     {single} expression |\r
71     {sequence} arg_list comma expression;\r
72 \r
73   primary =     \r
74         {value} value |\r
75         {variable} variable |\r
76     {function} func arg_list? r_par;\r
77         \r
78   range =\r
79     {single} cell |\r
80     {multi} [left]:cell colon [right]:cell;\r
81         \r
82   value =\r
83     {rvi} rvi |\r
84     {string} string |\r
85     {constant} number |\r
86     {range} range |\r
87     {address} ampersand range |\r
88     {expr} l_par expression r_par;\r