modelling.g 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. grammar{
  2. start: (import | export | model | NEWLINE)+;
  3. import: IMPORT MV_URL AS MODEL_ID;
  4. export: EXPORT MODEL_ID TO MV_URL;
  5. model: MODEL_ID MODEL_ID NEWLINE? LCURLY NEWLINE? (model_element)* RCURLY;
  6. model_element: MODEL_ID MODEL_ID? inheritance? (LPAR MODEL_ID COMMA MODEL_ID RPAR)? NEWLINE? LCURLY NEWLINE? (model_attribute)* RCURLY NEWLINE?;
  7. inheritance: COLON MODEL_ID (COMMA MODEL_ID)*;
  8. model_attribute
  9. : (MODEL_ID COLON MODEL_ID NEWLINE?)
  10. | (MODEL_ID ASSIGN value NEWLINE?)
  11. | (DOLLAR STRVALUE DOLLAR NEWLINE?);
  12. value
  13. : DEC_NUMBER
  14. | FLOAT_NUMBER
  15. | TRUE
  16. | FALSE
  17. | STRVALUE;
  18. tokens{
  19. IMPORT: 'import';
  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. COLON : ':';
  35. LPAR: '\(';
  36. RPAR: '\)';
  37. COMMA: ',';
  38. EXPORT: 'export';
  39. TO: 'to';
  40. }
  41. }