Skip to content

Commit

Permalink
Релиза 0.20
Browse files Browse the repository at this point in the history
Новое в версии
 - Новая версия парсера запросов с более оптимальным алгоритмом анализа
 - Доработан парсер описаний методов. Он теперь корректно поддерживает сложные типы типа "Массив из Массив из Строка", а также более корректно разбирает сложны описания методов.
 - Поднят статический сайт проекта, на котором публикуется документация и JavaDoc
 - Настроена автоматическая публикация артефактов релиза

Изменения в поведении
 - Изменена обработка комментариев препроцессора в парсере BSL - они теперь приравнены к обычным комментариям
 - В лексере описания методов удалены токены HYPERLINK и COMPLEX_TYPE, обработка перенесена из лексера в парсер
  • Loading branch information
theshadowco committed Oct 12, 2021
2 parents 789362f + 12d58d5 commit 036454f
Show file tree
Hide file tree
Showing 17 changed files with 838 additions and 490 deletions.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ plugins {
id("com.github.ben-manes.versions") version "0.39.0"
id("me.champeau.gradle.jmh") version "0.5.3"
id("io.freefair.javadoc-links") version "6.2.0"
id("io.freefair.javadoc-utf-8") version "6.1.0"
id("io.freefair.javadoc-utf-8") version "6.2.0"
}

repositories {
Expand Down
4 changes: 2 additions & 2 deletions src/main/antlr/BSLLexer.g4
Original file line number Diff line number Diff line change
Expand Up @@ -518,7 +518,7 @@ PREPROC_MACOS : M A C O S;
PREPROC_IDENTIFIER : LETTER ( LETTER | DIGIT )*;
PREPROC_WHITE_SPACE: [ \t\f]+ -> channel(HIDDEN), type(WHITE_SPACE);
PREPROC_LINE_COMMENT: '//' ~[\r\n]* -> channel(HIDDEN);
PREPROC_LINE_COMMENT: '//' ~[\r\n]* -> channel(HIDDEN), type(LINE_COMMENT);
PREPROC_NEWLINE: '\r'?'\n' -> popMode, channel(HIDDEN);
PREPROC_ANY: ~[\r\n];
Expand Down Expand Up @@ -646,7 +646,7 @@ PREPROC_ENDDELETE
)
-> popMode, channel(PREPROC_DELETE_CHANNEL);
PREPROC_DELETE_WHITE_SPACE: [ \t\f]+ -> channel(HIDDEN), type(WHITE_SPACE);
PREPROC_DELETE_LINE_COMMENT: '//' ~[\r\n]* -> channel(HIDDEN), type(PREPROC_LINE_COMMENT);
PREPROC_DELETE_LINE_COMMENT: '//' ~[\r\n]* -> channel(HIDDEN), type(LINE_COMMENT);
PREPROC_DELETE_NEWLINE: '\r'?'\n' -> channel(HIDDEN), type(PREPROC_NEWLINE);
PREPROC_DELETE_ANY: . -> channel(PREPROC_DELETE_CHANNEL);
Expand Down
16 changes: 5 additions & 11 deletions src/main/antlr/BSLMethodDescriptionLexer.g4
Original file line number Diff line number Diff line change
Expand Up @@ -32,22 +32,14 @@ public BSLMethodDescriptionLexer(CharStream input, boolean crAwareCostructor) {
}
}

HYPERLINK:
( S E E | RU_S RU_M '.') ' '
LETTER (LETTER | DIGIT)* ('.' LETTER (LETTER | DIGIT)*)*
('(' ~[\n\r]* ')')*;

COMPLEX_TYPE:
LETTER (LETTER | DIGIT)* ' '
( O F | C O N T A I N S | RU_I RU_Z ) ' '
(LETTER (LETTER | DIGIT)* ('.' LETTER (LETTER | DIGIT)*)* | HYPERLINK) ':'?;

// KEYWORDS
PARAMETERS_KEYWORD: (P A R A M E T E R S | RU_P RU_A RU_R RU_A RU_M RU_E RU_T RU_R RU_Y) ':';
RETURNS_KEYWORD: (R E T U R N S | (RU_V RU_O RU_Z RU_V RU_R RU_A RU_SCH RU_A RU_E RU_M RU_O RU_E ' ' RU_Z RU_N RU_A RU_CH RU_E RU_N RU_I RU_E)) ':';
EXAMPLE_KEYWORD: (E X A M P L E | RU_P RU_R RU_I RU_M RU_E RU_R) ':';
EXAMPLE_KEYWORD: (E X A M P L E S? | RU_P RU_R RU_I RU_M RU_E RU_R RU_Y?) ':';
CALL_OPTIONS_KEYWORD: (C A L L ' ' O P T I O N S | RU_V RU_A RU_R RU_I RU_A RU_N RU_T RU_Y ' ' RU_V RU_Y RU_Z RU_O RU_V RU_A) ':';
DEPRECATE_KEYWORD: (D E P R E C A T E | RU_U RU_S RU_T RU_A RU_R RU_E RU_L RU_A) '.'?;
SEE_KEYWORD: (S E E | RU_S RU_M '.');
OF_KEYWORD: (O F | C O N T A I N S | RU_I RU_Z);

// COMMON
EOL : '\r'? '\n';
Expand All @@ -60,6 +52,8 @@ COMMA : ',';
COMMENT : '//';
WORD : LETTER (LETTER | DIGIT)*;
DOTSWORD: LETTER (LETTER | DIGIT)* ('.' LETTER (LETTER | DIGIT)*)+;
LPAREN : '(';
RPAREN : ')';

ANYSYMBOL: .;

Expand Down
9 changes: 6 additions & 3 deletions src/main/antlr/BSLMethodDescriptionParser.g4
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,12 @@ type:
| complexType
;
simpleType: (WORD | DOTSWORD);
listTypes: simpleType (COMMA SPACE? simpleType)+;
complexType: COMPLEX_TYPE;
hyperlinkType: HYPERLINK;
listTypes: (simpleType | complexType | hyperlinkType) (COMMA SPACE? (simpleType | complexType | hyperlinkType))+;

complexType:
collection=(WORD | DOTSWORD) SPACE OF_KEYWORD SPACE type;
hyperlinkType:
SEE_KEYWORD SPACE link=(WORD | DOTSWORD) (LPAREN linkParams=~(EOL)* RPAREN)?;

spitter: SPACE? DASH SPACE?;

Expand Down
101 changes: 57 additions & 44 deletions src/main/antlr/SDBLLexer.g4
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ BRACE: '{' -> pushMode(BRACE_MODE), channel(HIDDEN);
// KEYWORDS RU EN
ALLOWED: RU_R RU_A RU_Z RU_R RU_E RU_SH RU_E RU_N RU_N RU_Y RU_E | A L L O W E D;
AND: RU_I | A N D;
AS: RU_K RU_A RU_K | A S;
AS: (RU_K RU_A RU_K | A S) -> pushMode(ID_MODE);
ASC: RU_V RU_O RU_Z RU_R | A S C;
AUTOORDER: RU_A RU_V RU_T RU_O RU_U RU_P RU_O RU_R RU_YA RU_D RU_O
RU_CH RU_I RU_V RU_A RU_N RU_I RU_E | A U T O O R D E R;
Expand All @@ -68,7 +68,7 @@ CASE: RU_V RU_Y RU_B RU_O RU_R
CAST: RU_V RU_Y RU_R RU_A RU_Z RU_I RU_T RU_SOFT_SIGN | C A S T;
DESC: RU_U RU_B RU_Y RU_V | D E S C;
DISTINCT: RU_R RU_A RU_Z RU_L RU_I RU_CH RU_N RU_Y RU_E | D I S T I N C T;
DROP: RU_U RU_N RU_I RU_CH RU_T RU_O RU_ZH RU_I RU_T RU_SOFT_SIGN | D R O P;
DROP: (RU_U RU_N RU_I RU_CH RU_T RU_O RU_ZH RU_I RU_T RU_SOFT_SIGN | D R O P) -> pushMode(ID_MODE);
ELSE: RU_I RU_N RU_A RU_CH RU_E | E L S E;
END: RU_K RU_O RU_N RU_E RU_C | E N D;
ESCAPE: RU_S RU_P RU_E RU_C RU_S RU_I RU_M RU_V RU_O RU_L | E S C A P E;
Expand Down Expand Up @@ -108,6 +108,7 @@ DATETIME: RU_D RU_A RU_T RU_A RU_V RU_R RU_E RU_M RU_YA
DAY: RU_D RU_E RU_N RU_SOFT_SIGN | D A Y;
DAYOFYEAR: RU_D RU_E RU_N RU_SOFT_SIGN RU_G RU_O RU_D RU_A | D A Y O F Y E A R;
EMPTYTABLE: RU_P RU_U RU_S RU_T RU_A RU_YA RU_T RU_A RU_B RU_L RU_I RU_C RU_A | E M P T Y T A B L E;
EMPTYREF: RU_P RU_U RU_S RU_T RU_A RU_YA RU_S RU_S RU_Y RU_L RU_K RU_A | E M P T Y R E F;
ENDOFPERIOD: RU_K RU_O RU_N RU_E RU_C RU_P RU_E RU_R RU_I RU_O RU_D RU_A | E N D O F P E R I O D;
HALFYEAR: RU_P RU_O RU_L RU_U RU_G RU_O RU_D RU_I RU_E | H A L F Y E A R;
HOUR: RU_CH RU_A RU_S | H O U R;
Expand Down Expand Up @@ -140,7 +141,7 @@ YEAR: RU_G RU_O RU_D

// MDO TYPES RU EN
ACCOUNTING_REGISTER_TYPE:
REGISTER_RU RU_B RU_U RU_H RU_G RU_A RU_L RU_T RU_E RU_R RU_I RU_I | A C C O U N T I N G REGISTER_EN;
REGISTER_RU RU_B RU_U RU_H RU_G RU_A RU_L RU_T RU_E RU_R RU_I RU_I | A C C O U N T I N G REGISTER_EN;
ACCUMULATION_REGISTER_TYPE:
REGISTER_RU RU_N RU_A RU_K RU_O RU_P RU_L RU_E RU_N RU_I RU_YA | A C C U M U L A T I O N REGISTER_EN;
BUSINESS_PROCESS_TYPE:
Expand Down Expand Up @@ -172,54 +173,46 @@ INFORMATION_REGISTER_TYPE:
SEQUENCE_TYPE:
RU_P RU_O RU_S RU_L RU_E RU_D RU_O RU_V RU_A RU_T RU_E RU_L RU_SOFT_SIGN RU_N RU_O RU_S RU_T RU_SOFT_SIGN
| S E Q U E N C E;
TASK_TYPE: RU_Z RU_A RU_D RU_A RU_CH RU_A | T A S K;
TASK_TYPE : RU_Z RU_A RU_D RU_A RU_CH RU_A | T A S K;

// FIELDS RU EN
ROUTEPOINT_FIELD: RU_T RU_O RU_CH RU_K RU_A RU_M RU_A RU_R RU_SH RU_R RU_U RU_T RU_A | R O U T E P O I N T;

// compex keywords
INDEX_BY: (RU_I RU_N RU_D RU_E RU_K RU_S RU_I RU_R RU_O RU_V RU_A RU_T RU_SOFT_SIGN | I N D E X)
KEYWORD_SPLIT BY_PART;
INDEX: (RU_I RU_N RU_D RU_E RU_K RU_S RU_I RU_R RU_O RU_V RU_A RU_T RU_SOFT_SIGN | I N D E X);
GROUP: (RU_S RU_G RU_R RU_U RU_P RU_P RU_I RU_R RU_O RU_V RU_A RU_T RU_SOFT_SIGN | G R O U P);
ORDER: (RU_U RU_P RU_O RU_R RU_YA RU_D RU_O RU_CH RU_I RU_T RU_SOFT_SIGN | O R D E R);

GROUP_BY: (RU_S RU_G RU_R RU_U RU_P RU_P RU_I RU_R RU_O RU_V RU_A RU_T RU_SOFT_SIGN | G R O U P)
KEYWORD_SPLIT BY_PART;
GROUPEDBY: (RU_S RU_G RU_R RU_U RU_P RU_P RU_I RU_R RU_O RU_V RU_A RU_N RU_O RU_P RU_O | G R O U P E D B Y);

ORDER_BY: (RU_U RU_P RU_O RU_R RU_YA RU_D RU_O RU_CH RU_I RU_T RU_SOFT_SIGN | O R D E R)
KEYWORD_SPLIT BY_PART;
GROUPING : (RU_G RU_R RU_U RU_P RU_P RU_I RU_R RU_U RU_YU RU_SCH RU_I RU_M | G R O U P I N G);
SET : (RU_N RU_A RU_B RU_O RU_R RU_A RU_M | S E T);

RIGHT_JOIN : (RU_P RU_R RU_A RU_V RU_O RU_E | R I G H T) KEYWORD_SPLIT (OUTER_PART KEYWORD_SPLIT)? JOIN_PART;
LEFT_JOIN : (RU_L RU_E RU_V RU_O RU_E | L E F T) KEYWORD_SPLIT (OUTER_PART KEYWORD_SPLIT)? JOIN_PART;
INNER_JOIN : (RU_V RU_N RU_U RU_T RU_R RU_E RU_N RU_N RU_E RU_E | I N N E R) KEYWORD_SPLIT JOIN_PART;
FULL_JOIN : (RU_P RU_O RU_L RU_N RU_O RU_E | F U L L) KEYWORD_SPLIT (OUTER_PART KEYWORD_SPLIT)? JOIN_PART;
JOIN : JOIN_PART;
RIGHT : (RU_P RU_R RU_A RU_V RU_O RU_E | R I G H T);
LEFT : (RU_L RU_E RU_V RU_O RU_E | L E F T);
INNER : (RU_V RU_N RU_U RU_T RU_R RU_E RU_N RU_N RU_E RU_E | I N N E R);
FULL : (RU_P RU_O RU_L RU_N RU_O RU_E | F U L L);
JOIN : (RU_S RU_O RU_E RU_D RU_I RU_N RU_E RU_N RU_I RU_E | J O I N);
OUTER : (RU_V RU_N RU_E RU_SH RU_N RU_E RU_E | O U T E R);

FOR_UPDATE : (RU_D RU_L RU_YA | F O R)
KEYWORD_SPLIT
(RU_I RU_Z RU_M RU_E RU_N RU_E RU_N RU_I RU_YA | U P D A T E);
FOR : (RU_D RU_L RU_YA | F O R);
UPDATE : (RU_I RU_Z RU_M RU_E RU_N RU_E RU_N RU_I RU_YA | U P D A T E);

UNION_ALL : UNION_PART KEYWORD_SPLIT (RU_V RU_S RU_E | A L L);
UNION : UNION_PART;
ALL : (RU_V RU_S RU_E | A L L);
UNION : (RU_O RU_B RU_SOLID_SIGN RU_E RU_D RU_I RU_N RU_I RU_T RU_SOFT_SIGN | U N I O N);

IN_HIERARCHY: (RU_V | I N)
KEYWORD_SPLIT
(RU_I RU_E RU_R RU_A RU_R RU_H RU_I RU_I | H I E R A R C H Y);
IN: (RU_V | I N);
HIERARCHY_FOR_IN: (RU_I RU_E RU_R RU_A RU_R RU_H RU_I RU_I | H I E R A R C H Y);
IN :(RU_V | I N);

// keywords fragments
fragment KEYWORD_SPLIT: [ \r\n\t]+;
fragment BY_PART : (RU_P RU_O | B Y);
fragment JOIN_PART : (RU_S RU_O RU_E RU_D RU_I RU_N RU_E RU_N RU_I RU_E | J O I N);
fragment OUTER_PART : (RU_V RU_N RU_E RU_SH RU_N RU_E RU_E | O U T E R);
fragment UNION_PART : (RU_O RU_B RU_SOLID_SIGN RU_E RU_D RU_I RU_N RU_I RU_T RU_SOFT_SIGN | U N I O N);
// tables
fragment BALANCE_RU: RU_O RU_S RU_T RU_A RU_T RU_K RU_I;
fragment BALANCE_EN: B A L A N C E;
fragment BALANCE_RU : RU_O RU_S RU_T RU_A RU_T RU_K RU_I;
fragment BALANCE_EN : B A L A N C E;
fragment DOCUMENT_RU: RU_D RU_O RU_K RU_U RU_M RU_E RU_N RU_T;
fragment DOCUMENT_EN: D O C U M E N T;
fragment EXT_DIMENSIONS_RU: RU_S RU_U RU_B RU_K RU_O RU_N RU_T RU_O;
fragment EXT_DIMENSIONS_EN: E X T D I M E N S I O N S;
fragment PLAN_RU: RU_P RU_L RU_A RU_N;
fragment PLAN_EN: C H A R T O F;
fragment PLAN_RU : RU_P RU_L RU_A RU_N;
fragment PLAN_EN : C H A R T O F;
fragment REGISTER_RU: RU_R RU_E RU_G RU_I RU_S RU_T RU_R;
fragment REGISTER_EN: R E G I S T E R;
fragment TURNOVERS_RU: RU_O RU_B RU_O RU_R RU_O RU_T RU_Y;
Expand Down Expand Up @@ -294,25 +287,27 @@ FLOAT : DIGIT+ '.' DIGIT*;
STR : '"' -> pushMode(STRINGS);
INCORRECT_IDENTIFIER : DIGIT+ LETTER (LETTER | DIGIT)*;
IDENTIFIER : LETTER (LETTER | DIGIT)*;
UNKNOWN: . -> channel(HIDDEN);
UNKNOWN : . -> channel(HIDDEN);

mode STRINGS;
STRFULL: (~["\n\r] | '""')* '"' -> type(STR), popMode;
SKIPNEWLINE: [\n\r][ \t\f]* -> channel(HIDDEN), type(WHITE_SPACE);
STRPART: (~["\n\r] | '""')+ -> type(STR);
STRFULL : (~["\n\r] | '""')* '"' -> type(STR), popMode;
SKIPNEWLINE : [\n\r][ \t\f]* -> channel(HIDDEN), type(WHITE_SPACE);
STRPART : (~["\n\r] | '""')+ -> type(STR);
// PARAMETERS
mode PARAMETER_MODE;
PARAMETER_WHITE_SPACE : [ \n\r\t\f]+ -> channel(HIDDEN), type(WHITE_SPACE);
PARAMETER_IDENTIFIER : LETTER (LETTER | DIGIT)* -> popMode;
PARAMETER_WHITE_SPACE : WHITE_SPACE -> channel(HIDDEN), type(WHITE_SPACE);
PARAMETER_IDENTIFIER : IDENTIFIER -> popMode;
PARAMETER_UKNOWN : . -> channel(HIDDEN), type(UNKNOWN);
mode DOT_MODE;
DOT_WHITE_SPACE : [ \t\f]+ -> channel(HIDDEN), type(WHITE_SPACE);
DOT_WHITE_SPACE : WHITE_SPACE -> channel(HIDDEN), type(WHITE_SPACE);
DOT_MUL : MUL -> type(MUL), popMode;
DOT_LPAREN : LPAREN -> type(LPAREN), popMode;
DOT_RPAREN : RPAREN -> type(RPAREN), popMode;
DOT_ROUTEPOINT_FIELD : ROUTEPOINT_FIELD -> type(ROUTEPOINT_FIELD), popMode;
DOT_EMPTYREF : EMPTYREF -> type(EMPTYREF), popMode;
// VIRTUAL TABLES RU EN
ACTUAL_ACTION_PERIOD_VT:
(RU_F RU_A RU_K RU_T RU_I RU_CH RU_E RU_S RU_K RU_I RU_J RU_P RU_E RU_R RU_I RU_O RU_D RU_D RU_E RU_J RU_S RU_T RU_V RU_I RU_YA
Expand All @@ -336,11 +331,29 @@ TASK_BY_PERFORMER_VT:
| T A S K B Y P E R F O R M E R) -> popMode;
TURNOVERS_VT: (TURNOVERS_RU | TURNOVERS_EN) -> popMode;
DOT_IDENTIFIER : (LETTER ( LETTER | DIGIT )*) -> type(IDENTIFIER), popMode;
DOT_IDENTIFIER : IDENTIFIER -> type(IDENTIFIER), popMode;
mode BRACE_MODE;
BRACE_WHITE_SPACE : [ \n\r\t\f]+ -> channel(HIDDEN), type(WHITE_SPACE);
BRACE_IDENTIFIER : LETTER (LETTER | DIGIT)* -> channel(HIDDEN);
BRACE_WHITE_SPACE : WHITE_SPACE -> channel(HIDDEN), type(WHITE_SPACE);
BRACE_IDENTIFIER : IDENTIFIER -> channel(HIDDEN);
BRACE_START : '{' -> pushMode(BRACE_MODE), channel(HIDDEN);
BRACE_END : '}' -> channel(HIDDEN), type(UNKNOWN), popMode;
BRACE_UNKNOWN : . -> channel(HIDDEN), type(UNKNOWN);
mode ID_MODE;
ID_BOOLEAN : BOOLEAN -> type(BOOLEAN), popMode;
ID_NUMBER : NUMBER -> type(NUMBER), popMode;
ID_STRING : STRING -> type(STRING), popMode;
ID_DATE : DATE -> type(DATE), popMode;
ID_BUSINESS_PROCESS_TYPE : BUSINESS_PROCESS_TYPE -> type(BUSINESS_PROCESS_TYPE), popMode;
ID_CATALOG_TYPE : CATALOG_TYPE -> type(CATALOG_TYPE), popMode;
ID_CHART_OF_ACCOUNTS_TYPE : CHART_OF_ACCOUNTS_TYPE -> type(CHART_OF_ACCOUNTS_TYPE), popMode;
ID_CHART_OF_CALCULATION_TYPES_TYPE : CHART_OF_CALCULATION_TYPES_TYPE -> type(CHART_OF_CALCULATION_TYPES_TYPE), popMode;
ID_CHART_OF_CHARACTERISTIC_TYPES_TYPE : CHART_OF_CHARACTERISTIC_TYPES_TYPE -> type(CHART_OF_CHARACTERISTIC_TYPES_TYPE), popMode;
ID_DOCUMENT_TYPE : DOCUMENT_TYPE -> type(DOCUMENT_TYPE), popMode;
ID_ENUM_TYPE : ENUM_TYPE -> type(ENUM_TYPE), popMode;
ID_EXCHANGE_PLAN_TYPE : EXCHANGE_PLAN_TYPE -> type(EXCHANGE_PLAN_TYPE), popMode;
ID_TASK_TYPE : TASK_TYPE -> type(TASK_TYPE), popMode;
ID_DOT : DOT -> type(DOT), pushMode(DOT_MODE), popMode;
ID_IDENTIFIER : IDENTIFIER -> type(IDENTIFIER), popMode;
ID_UNKNOWN : . -> channel(HIDDEN), type(UNKNOWN);
Loading

0 comments on commit 036454f

Please sign in to comment.