From: Robert Varga Date: Tue, 11 Aug 2020 08:47:25 +0000 (+0200) Subject: Refactor YANG statement parser structure X-Git-Tag: v5.0.6~26 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=b462288cc6e678b9350551c64ecda96196ebe8b4;p=yangtools.git Refactor YANG statement parser structure Current definition leads to leading whitespace being considered a part of the statement. This leads to misleading line/character being reported as the start of the statement. Fix this by introducing a top-level 'file', which encapsulates at least one statement with its leading/trailing whitespace. The other parts then come together naturally. JIRA: YANGTOOLS-1129 Change-Id: I9f725b09eae6f8acf4397c97c60f99caaade798b Signed-off-by: Robert Varga --- diff --git a/yang/yang-parser-antlr/src/main/antlr4/org/opendaylight/yangtools/yang/parser/antlr/YangStatementParser.g4 b/yang/yang-parser-antlr/src/main/antlr4/org/opendaylight/yangtools/yang/parser/antlr/YangStatementParser.g4 index 9f836e2e32..dadf258875 100644 --- a/yang/yang-parser-antlr/src/main/antlr4/org/opendaylight/yangtools/yang/parser/antlr/YangStatementParser.g4 +++ b/yang/yang-parser-antlr/src/main/antlr4/org/opendaylight/yangtools/yang/parser/antlr/YangStatementParser.g4 @@ -11,7 +11,10 @@ options { tokenVocab = YangStatementLexer; } -statement : SEP* keyword SEP* (argument)? SEP* (SEMICOLON | LEFT_BRACE SEP* (statement)* SEP* RIGHT_BRACE SEP*) SEP*; +// NOTE: we need to use SEP*/SEP+ because comments end up breaking whitespace +// sequences into two. +file : SEP* statement SEP* EOF; +statement : keyword (SEP+ argument)? SEP* (SEMICOLON | LEFT_BRACE SEP* (statement SEP*)* RIGHT_BRACE); keyword : (IDENTIFIER COLON)? IDENTIFIER; argument : STRING (SEP* PLUS SEP* STRING)* | IDENTIFIER; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangStatementStreamSource.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangStatementStreamSource.java index 7d26fa946c..9f1f6dd08b 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangStatementStreamSource.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangStatementStreamSource.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.repo; import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Verify.verifyNotNull; import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; @@ -31,6 +32,7 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.parser.antlr.YangStatementLexer; import org.opendaylight.yangtools.yang.parser.antlr.YangStatementParser; +import org.opendaylight.yangtools.yang.parser.antlr.YangStatementParser.FileContext; import org.opendaylight.yangtools.yang.parser.antlr.YangStatementParser.StatementContext; import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule; import org.opendaylight.yangtools.yang.parser.spi.source.QNameToStatementDefinition; @@ -171,7 +173,7 @@ public final class YangStatementStreamSource extends AbstractIdentifiable