modelling.g 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. grammar{
  2. start: (import | export | include_files | model | NEWLINE)+;
  3. import: IMPORT MV_URL AS MODEL_ID;
  4. export: EXPORT MODEL_ID TO MV_URL;
  5. include_files: INCLUDE STRVALUE NEWLINE;
  6. model: MODEL_ID (LPAR MODEL_ID RPAR)? MODEL_ID NEWLINE? LCURLY NEWLINE? (model_element)* RCURLY;
  7. model_element: MODEL_ID MODEL_ID? inheritance? (LPAR MODEL_ID COMMA MODEL_ID RPAR)? NEWLINE? LCURLY NEWLINE? (model_attribute)* RCURLY NEWLINE?;
  8. inheritance: COLON MODEL_ID (COMMA MODEL_ID)*;
  9. model_attribute : ((LCURLY MODEL_ID RCURLY)? model_element)
  10. | (MODEL_ID COLON MODEL_ID (LCURLY NEWLINE? model_attr_instance* RCURLY)? NEWLINE?)
  11. | (model_attr_instance)
  12. | (NEWLINE? DOLLAR ANYTHING_EXCEPT_DOLLAR DOLLAR NEWLINE?);
  13. model_attr_instance: (MODEL_ID ASSIGN value NEWLINE?)
  14. | (MODEL_ID ASSIGN NEWLINE? DOLLAR ANYTHING_EXCEPT_DOLLAR DOLLAR NEWLINE?)
  15. | (MODEL_ID ASSIGN MODEL_ID NEWLINE?);
  16. value
  17. : DEC_NUMBER
  18. | FLOAT_NUMBER
  19. | TRUE
  20. | FALSE
  21. | STRVALUE;
  22. tokens{
  23. IMPORT: 'import';
  24. AS: 'as';
  25. MODEL_ID: '[a-zA-Z_][a-zA-Z_0-9]*';
  26. MV_URL: '[a-zA-Z_0-9/]*';
  27. LCURLY: '{';
  28. RCURLY: '}';
  29. NEWLINE: '(\r?\n)+';
  30. DEC_NUMBER: '[+-]?(0|[1-9]\d*[lL]?)';
  31. FLOAT_NUMBER: '[+-]?((\d+\.\d*|\.\d+)([eE][-+]?\d+)?|\d+[eE][-+]?\d+)';
  32. STRVALUE: 'u?r?("(?!"").*?(?<!\\)(\\\\)*?"|\'(?!\'\').*?(?<!\\)(\\\\)*?\')';
  33. TRUE: 'True';
  34. FALSE: 'False';
  35. ASSIGN: '=';
  36. DOLLAR: '\$';
  37. WS: '[ ]+' @Impl;
  38. TAB: '[\t]+' @Impl;
  39. COLON : ':';
  40. LPAR: '\(';
  41. RPAR: '\)';
  42. COMMA: ',';
  43. EXPORT: 'export';
  44. TO: 'to';
  45. ANYTHING_EXCEPT_DOLLAR: '[^$]*';
  46. INCLUDE: 'include';
  47. }
  48. }