]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.basicexpression/src/expression.sablecc3
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.basicexpression / src / expression.sablecc3
diff --git a/bundles/org.simantics.basicexpression/src/expression.sablecc3 b/bundles/org.simantics.basicexpression/src/expression.sablecc3
new file mode 100644 (file)
index 0000000..c9d6bca
--- /dev/null
@@ -0,0 +1,88 @@
+Package org.simantics.basicexpression;\r
+\r
+Helpers\r
+  letter = [[['A'..'Z'] + ['a'..'z']] + '_'];\r
+  digit = ['0'..'9'];\r
+  cr = 13;\r
+  lf = 10;\r
+  not_cr_lf = [[32..255] - [cr + lf]];\r
+  \r
+  harmless_char = [[32..255] - [''' + ['"' + '\']]];\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
+  variable = letter (letter | digit)*;\r
+  func = letter (letter | digit)* '(';\r
+  cell = '_'? letter+ digit+;\r
+  rvi = ('.')* ('/' | '#') ('/' | '#' | '.' | 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
+       {variable} variable |\r
+    {function} func arg_list? r_par;\r
+       \r
+  range =\r
+    {single} cell |\r
+    {multi} [left]:cell colon [right]:cell;\r
+       \r
+  value =\r
+    {rvi} rvi |\r
+    {string} string |\r
+    {constant} number |\r
+    {range} range |\r
+    {address} ampersand range |\r
+    {expr} l_par expression r_par;\r