modelling.g 1.6 KB

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