-Package org.simantics.spreadsheet.common.expression;\r
-\r
-Helpers\r
- letter = [['A'..'Z'] + ['a'..'z']];\r
- digit = ['0'..'9'];\r
- cr = 13;\r
- lf = 10;\r
- not_cr_lf = [[32..127] - [cr + lf]];\r
- \r
- harmless_char = [[32..127] - [''' + ['"' + '\']]];\r
-\r
- sq_str_char = harmless_char | '"';\r
- dq_str_char = harmless_char | ''';\r
-\r
- sq_str_char_sequence = sq_str_char+;\r
- dq_str_char_sequence = dq_str_char+;\r
-\r
- single_quote_string = ''' sq_str_char_sequence? ''';\r
- double_quote_string = '"' dq_str_char_sequence? '"';\r
- \r
-Tokens\r
- less_than = '<';\r
- greater_than = '>';\r
- equal = '=';\r
-\r
- plus = '+';\r
- minus = '-';\r
- mult = '*';\r
- div = '/';\r
- ampersand = '&';\r
-\r
- comma = ',';\r
- colon = ':';\r
- \r
- l_par = '(';\r
- r_par = ')';\r
-\r
- func = letter (letter | digit)* '(';\r
- cell = '_'? letter+ digit+;\r
- number = digit+ '.'* digit*;\r
- string = single_quote_string | double_quote_string; \r
-\r
- new_line = cr | lf | cr lf;\r
-\r
- blank = ' '*;\r
-\r
-Ignored Tokens\r
- blank;\r
-\r
-Productions\r
-\r
- expression =\r
- {mult} multiplicative |\r
- {plus} [left]:expression plus [right]:multiplicative |\r
- {minus} expression minus multiplicative;\r
-\r
- multiplicative =\r
- {unary} unary |\r
- {mult} [left]:multiplicative mult [right]:unary |\r
- {div} [left]:multiplicative div [right]:unary;\r
-\r
- unary =\r
- {primary} primary |\r
- {unaryplus} plus unary |\r
- {unaryminus} minus unary;\r
-\r
- arg_list = \r
- {single} expression |\r
- {sequence} arg_list comma expression;\r
-\r
- primary = \r
- {value} value |\r
- {function} func arg_list? r_par;\r
- \r
- range =\r
- {single} cell |\r
- {multi} [left]:cell colon [right]:cell;\r
- \r
- value =\r
- {string} string |\r
- {constant} number |\r
- {range} range |\r
- {address} ampersand range |\r
- {expr} l_par expression r_par;\r
+Package org.simantics.spreadsheet.common.expression;
+
+Helpers
+ letter = [['A'..'Z'] + ['a'..'z']];
+ digit = ['0'..'9'];
+ cr = 13;
+ lf = 10;
+ not_cr_lf = [[32..127] - [cr + lf]];
+
+ harmless_char = [[32..127] - [''' + ['"' + '\']]];
+
+ sq_str_char = harmless_char | '"';
+ dq_str_char = harmless_char | ''';
+
+ sq_str_char_sequence = sq_str_char+;
+ dq_str_char_sequence = dq_str_char+;
+
+ single_quote_string = ''' sq_str_char_sequence? ''';
+ double_quote_string = '"' dq_str_char_sequence? '"';
+
+Tokens
+ less_than = '<';
+ greater_than = '>';
+ equal = '=';
+
+ plus = '+';
+ minus = '-';
+ mult = '*';
+ div = '/';
+ ampersand = '&';
+
+ comma = ',';
+ colon = ':';
+
+ l_par = '(';
+ r_par = ')';
+
+ func = letter (letter | digit)* '(';
+ cell = '_'? letter+ digit+;
+ number = digit+ '.'* digit*;
+ string = single_quote_string | double_quote_string;
+
+ new_line = cr | lf | cr lf;
+
+ blank = ' '*;
+
+Ignored Tokens
+ blank;
+
+Productions
+
+ expression =
+ {mult} multiplicative |
+ {plus} [left]:expression plus [right]:multiplicative |
+ {minus} expression minus multiplicative;
+
+ multiplicative =
+ {unary} unary |
+ {mult} [left]:multiplicative mult [right]:unary |
+ {div} [left]:multiplicative div [right]:unary;
+
+ unary =
+ {primary} primary |
+ {unaryplus} plus unary |
+ {unaryminus} minus unary;
+
+ arg_list =
+ {single} expression |
+ {sequence} arg_list comma expression;
+
+ primary =
+ {value} value |
+ {function} func arg_list? r_par;
+
+ range =
+ {single} cell |
+ {multi} [left]:cell colon [right]:cell;
+
+ value =
+ {string} string |
+ {constant} number |
+ {range} range |
+ {address} ampersand range |
+ {expr} l_par expression r_par;