From 2c6cfc3668c88c1456098421c5689c80adb0548d Mon Sep 17 00:00:00 2001 From: Alexey Sosnoviy Date: Wed, 19 Jun 2019 02:22:13 +0300 Subject: [PATCH] Preproc parse error fix #36 --- src/main/antlr/BSLParser.g4 | 2 +- .../github/_1c_syntax/bsl/parser/BSLParserTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/antlr/BSLParser.g4 b/src/main/antlr/BSLParser.g4 index 7dc08c3e..6e7d59d6 100644 --- a/src/main/antlr/BSLParser.g4 +++ b/src/main/antlr/BSLParser.g4 @@ -45,7 +45,7 @@ preproc_else : PREPROC_ELSE_KEYWORD; preproc_endif : PREPROC_ENDIF_KEYWORD; preproc_expression - : ( PREPROC_LPAREN preproc_expression PREPROC_RPAREN ) + : ( PREPROC_NOT_KEYWORD? (PREPROC_LPAREN preproc_expression PREPROC_RPAREN ) ) | preproc_logicalExpression ; preproc_logicalOperand diff --git a/src/test/java/org/github/_1c_syntax/bsl/parser/BSLParserTest.java b/src/test/java/org/github/_1c_syntax/bsl/parser/BSLParserTest.java index e1cbf3ba..bf525c4e 100644 --- a/src/test/java/org/github/_1c_syntax/bsl/parser/BSLParserTest.java +++ b/src/test/java/org/github/_1c_syntax/bsl/parser/BSLParserTest.java @@ -28,6 +28,7 @@ import org.antlr.v4.runtime.RecognitionException; import org.antlr.v4.runtime.tree.ParseTree; import org.apache.commons.io.IOUtils; +//import org.testng.annotations.ITestAnnotation; import org.junit.jupiter.api.Test; import java.io.IOException; @@ -175,6 +176,15 @@ void testPreproc_if() { setInput("Если Клиент Тогда", BSLLexer.PREPROCESSOR_MODE); assertMatches(parser.preproc_if()); + setInput("Если НЕ (ТонкийКлиент ИЛИ ВебКлиент) Тогда", BSLLexer.PREPROCESSOR_MODE); + assertMatches(parser.preproc_if()); + + setInput("Если НЕ (НЕ ТонкийКлиент ИЛИ НЕ ВебКлиент) Тогда", BSLLexer.PREPROCESSOR_MODE); + assertMatches(parser.preproc_if()); + + setInput("Если ТонкийКлиент И ВебКлиент Тогда", BSLLexer.PREPROCESSOR_MODE); + assertMatches(parser.preproc_if()); + setInput("Если", BSLLexer.PREPROCESSOR_MODE); assertNotMatches(parser.preproc_if());