emqx_variform_parser.yrl 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. Nonterminals
  2. expr
  3. call_or_var
  4. array
  5. args
  6. arg.
  7. Terminals
  8. identifier
  9. integer
  10. float
  11. string
  12. boolean
  13. '(' ')'
  14. ',' '[' ']'.
  15. Rootsymbol
  16. expr.
  17. %% Grammar Rules
  18. %% Root expression: function call or variable or a boolean
  19. expr -> call_or_var : '$1'.
  20. expr -> boolean: element(3, '$1').
  21. %% Function call or variable
  22. call_or_var -> identifier '(' ')' : {call, element(3, '$1'), []}.
  23. call_or_var -> identifier '(' args ')' : {call, element(3, '$1'), '$3'}.
  24. call_or_var -> identifier : {var, element(3, '$1')}.
  25. %% Array is like a arg list, but with square brackets
  26. array -> '[' args ']' : {array, '$2'}.
  27. %% Argument handling
  28. args -> arg : ['$1'].
  29. args -> args ',' arg : '$1' ++ ['$3'].
  30. %% Arguments can be expressions, arrays, numbers, strings or booleans
  31. arg -> expr : '$1'.
  32. arg -> array : '$1'.
  33. arg -> integer: {integer, element(3, '$1')}.
  34. arg -> float: {float, element(3, '$1')}.
  35. arg -> string : {str, element(3, '$1')}.
  36. Erlang code.
  37. %% mute xref warning
  38. -export([return_error/2]).