From 48a0fa39e8dbb3fd584cc0d8fab39abc02d50f3a Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 22 Jul 2020 13:15:56 +0200 Subject: [PATCH] Revert "Update YANG lexer/parser to accept free-standing '+'" This reverts commit 04ed60d275521fd6e6ee57d5b1ce4e6a519d2e35, as it causes a regression around "foo" +"foo" construct. JIRA: YANGTOOLS-1089 Change-Id: Ib5af7a994c19bf99fb5cb2a875063d623cc6c3f7 Signed-off-by: Robert Varga --- .../yang/parser/antlr/YangStatementLexer.g4 | 2 +- .../yang/parser/antlr/YangStatementParser.g4 | 2 +- .../rfc7950/repo/ArgumentContextUtils.java | 2 - .../yangtools/yang/stmt/YT1089Test.java | 80 ------------------- .../src/test/resources/bugs/YT1089/foo.yang | 22 ----- 5 files changed, 2 insertions(+), 106 deletions(-) delete mode 100644 yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YT1089Test.java delete mode 100644 yang/yang-parser-rfc7950/src/test/resources/bugs/YT1089/foo.yang diff --git a/yang/yang-parser-antlr/src/main/antlr4/org/opendaylight/yangtools/yang/parser/antlr/YangStatementLexer.g4 b/yang/yang-parser-antlr/src/main/antlr4/org/opendaylight/yangtools/yang/parser/antlr/YangStatementLexer.g4 index 2872acb161..8185545f38 100644 --- a/yang/yang-parser-antlr/src/main/antlr4/org/opendaylight/yangtools/yang/parser/antlr/YangStatementLexer.g4 +++ b/yang/yang-parser-antlr/src/main/antlr4/org/opendaylight/yangtools/yang/parser/antlr/YangStatementLexer.g4 @@ -35,7 +35,7 @@ fragment ESC : '\\' (["\\/bfnrt] | UNICODE); fragment UNICODE : 'u' HEX HEX HEX HEX; fragment HEX : [0-9a-fA-F] ; -STRING: ((~( '\r' | '\n' | '\t' | ' ' | ';' | '{' | '"' | '\'' | '}' | '/')~( '\r' | '\n' | '\t' | ' ' | ';' | '{' | '}' )* ) | SUB_STRING ); +STRING: ((~( '\r' | '\n' | '\t' | ' ' | ';' | '{' | '"' | '\'' | '}' | '/' | '+')~( '\r' | '\n' | '\t' | ' ' | ';' | '{' | '}' )* ) | SUB_STRING ); mode BLOCK_COMMENT_MODE; END_BLOCK_COMMENT : '*/' -> popMode, skip; 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 2408d93a76..9f836e2e32 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 @@ -14,4 +14,4 @@ options { statement : SEP* keyword SEP* (argument)? SEP* (SEMICOLON | LEFT_BRACE SEP* (statement)* SEP* RIGHT_BRACE SEP*) SEP*; keyword : (IDENTIFIER COLON)? IDENTIFIER; -argument : STRING (SEP* PLUS SEP* STRING)* | PLUS | 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/ArgumentContextUtils.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/ArgumentContextUtils.java index 2aefece439..ea51ac5149 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/ArgumentContextUtils.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/ArgumentContextUtils.java @@ -118,8 +118,6 @@ abstract class ArgumentContextUtils { case YangStatementParser.IDENTIFIER: // Simple case, there is a simple string, which cannot contain anything that we would need to process. return firstNode.getText(); - case YangStatementParser.PLUS: - return "+"; case YangStatementParser.STRING: // Complex case, defer to a separate method return concatStrings(context, ref); diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YT1089Test.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YT1089Test.java deleted file mode 100644 index cba0465bb6..0000000000 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YT1089Test.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.stmt; - -import static org.hamcrest.CoreMatchers.instanceOf; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; - -import com.google.common.collect.Iterables; -import java.util.Iterator; -import org.junit.Test; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ContactEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.PrefixEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; - -public class YT1089Test { - @Test - public void testPlusLexing() throws Exception { - final EffectiveModelContext ctx = StmtTestUtils.parseYangSource("/bugs/YT1089/foo.yang"); - assertEquals(1, ctx.getModuleStatements().size()); - - final Iterator> it = - Iterables.getOnlyElement(ctx.getModuleStatements().values()).effectiveSubstatements().iterator(); - - assertThat(it.next(), instanceOf(NamespaceEffectiveStatement.class)); - assertThat(it.next(), instanceOf(PrefixEffectiveStatement.class)); - - EffectiveStatement stmt = it.next(); - assertThat(stmt, instanceOf(DescriptionEffectiveStatement.class)); - assertEquals("+something", stmt.argument()); - - stmt = it.next(); - assertThat(stmt, instanceOf(ContactEffectiveStatement.class)); - assertEquals("contact++", stmt.argument()); - - stmt = it.next(); - assertThat(stmt, instanceOf(OrganizationEffectiveStatement.class)); - assertEquals("organiza++tion", stmt.argument()); - - assertFoo(it.next()); - assertBar(it.next()); - assertFalse(it.hasNext()); - } - - private static void assertFoo(final EffectiveStatement stmt) { - assertThat(stmt, instanceOf(LeafEffectiveStatement.class)); - assertEquals(QName.create("urn:foo", "foo"), stmt.argument()); - - final Iterator> it = stmt.effectiveSubstatements().iterator(); - assertThat(it.next(), instanceOf(TypeEffectiveStatement.class)); - assertEquals("+", it.next().argument()); - assertEquals("squotdquot", it.next().argument()); - assertEquals("++", it.next().argument()); - assertFalse(it.hasNext()); - } - - private static void assertBar(final EffectiveStatement stmt) { - assertThat(stmt, instanceOf(LeafEffectiveStatement.class)); - assertEquals(QName.create("urn:foo", "bar"), stmt.argument()); - final Iterator> it = stmt.effectiveSubstatements().iterator(); - assertThat(it.next(), instanceOf(TypeEffectiveStatement.class)); - assertEquals("++", it.next().argument()); - assertEquals("+ + ++", it.next().argument()); - assertEquals("++ + +", it.next().argument()); - assertFalse(it.hasNext()); - } -} diff --git a/yang/yang-parser-rfc7950/src/test/resources/bugs/YT1089/foo.yang b/yang/yang-parser-rfc7950/src/test/resources/bugs/YT1089/foo.yang deleted file mode 100644 index 982dca3269..0000000000 --- a/yang/yang-parser-rfc7950/src/test/resources/bugs/YT1089/foo.yang +++ /dev/null @@ -1,22 +0,0 @@ -module foo { - namespace urn:foo; - prefix foo; - - description +something; - contact contact++; - organization organiza++tion; - - leaf foo { - type string; - default +; - description 'squot' + "dquot"; - reference "+" + '+'; - } - - leaf bar { - type string; - default ++; - description "+ + ++"; - reference "++ + +"; - } -} -- 2.36.6