X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.basicexpression%2Fsrc%2Fexpression.sablecc3;h=eba68df60ac77d384c4d6f6059253a5cc8ba9487;hp=c9d6bca7f1789cae6f54c558da796afe2a9f0c95;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hpb=24e2b34260f219f0d1644ca7a138894980e25b14 diff --git a/bundles/org.simantics.basicexpression/src/expression.sablecc3 b/bundles/org.simantics.basicexpression/src/expression.sablecc3 index c9d6bca7f..eba68df60 100644 --- a/bundles/org.simantics.basicexpression/src/expression.sablecc3 +++ b/bundles/org.simantics.basicexpression/src/expression.sablecc3 @@ -1,88 +1,88 @@ -Package org.simantics.basicexpression; - -Helpers - letter = [[['A'..'Z'] + ['a'..'z']] + '_']; - digit = ['0'..'9']; - cr = 13; - lf = 10; - not_cr_lf = [[32..255] - [cr + lf]]; - - harmless_char = [[32..255] - [''' + ['"' + '\']]]; - - 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 = ')'; - - variable = letter (letter | digit)*; - func = letter (letter | digit)* '('; - cell = '_'? letter+ digit+; - rvi = ('.')* ('/' | '#') ('/' | '#' | '.' | 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 | - {variable} variable | - {function} func arg_list? r_par; - - range = - {single} cell | - {multi} [left]:cell colon [right]:cell; - - value = - {rvi} rvi | - {string} string | - {constant} number | - {range} range | - {address} ampersand range | - {expr} l_par expression r_par; +Package org.simantics.basicexpression; + +Helpers + letter = [[['A'..'Z'] + ['a'..'z']] + '_']; + digit = ['0'..'9']; + cr = 13; + lf = 10; + not_cr_lf = [[32..255] - [cr + lf]]; + + harmless_char = [[32..255] - [''' + ['"' + '\']]]; + + 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 = ')'; + + variable = letter (letter | digit)*; + func = letter (letter | digit)* '('; + cell = '_'? letter+ digit+; + rvi = ('.')* ('/' | '#') ('/' | '#' | '.' | 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 | + {variable} variable | + {function} func arg_list? r_par; + + range = + {single} cell | + {multi} [left]:cell colon [right]:cell; + + value = + {rvi} rvi | + {string} string | + {constant} number | + {range} range | + {address} ampersand range | + {expr} l_par expression r_par;