[YANGTOOLS-1089] Cannot parse yang files containing plus Created: 11/Mar/20 Updated: 26/Aug/20 Resolved: 14/Aug/20 |
|
| Status: | Resolved |
| Project: | yangtools |
| Component/s: | parser |
| Affects Version/s: | 2.1.8, 3.0.5, 4.0.7 |
| Fix Version/s: | 4.0.14, 5.0.6, 3.0.17 |
| Type: | Bug | Priority: | High |
| Reporter: | mikael petterson | Assignee: | Robert Varga |
| Resolution: | Done | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Environment: |
Jdk 1.8.0_181 and Redhat 7 |
||
| Description |
|
We have tried to use: dependency> <groupId>org.opendaylight.yangtools</groupId> <artifactId>yang-parser-impl</artifactId> <version>2.1.8</version> <type>jar</type> </dependency> <dependency> <groupId>org.opendaylight.yangtools</groupId> <artifactId>yang-parser-api</artifactId> <version>2.1.8</version> <type>jar</type> </dependency> <dependency> <groupId>org.opendaylight.yangtools</groupId> <artifactId>yang-model-api</artifactId> <version>2.1.8</version> <type>jar</type> </dependency>
and even 3.0.5 Problem appeared for example ( but is not limited to since we tried same for description) unquoted string for default like this:
leaf timeOffset {
type string {
length "5..6";
}
description "The time offset from UTC";
default +00:00;
}
We will get the following exception when parsing.
2020-03-10 21:33:02,578 (YangErrorListener.java:36)DEBUG : Syntax error in RevisionSourceIdentifier [name=company-timesettings-radio] at 1:3887: no viable alternative at input ' +'
org.antlr.v4.runtime.NoViableAltException
at org.antlr.v4.runtime.atn.ParserATNSimulator.noViableAlt(ParserATNSimulator.java:2028)
at org.antlr.v4.runtime.atn.ParserATNSimulator.execATN(ParserATNSimulator.java:467)
at org.antlr.v4.runtime.atn.ParserATNSimulator.adaptivePredict(ParserATNSimulator.java:393)
at org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser.statement(YangStatementParser.java:154)
at org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser.statement(YangStatementParser.java:229)
at org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser.statement(YangStatementParser.java:229)
at org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser.statement(YangStatementParser.java:229)
at org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource.parseYangSource(YangStatementStreamSource.java:192)
at org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource.create(YangStatementStreamSource.java:95)
at org.opendaylight.yangtools.yang.parser.impl.YangParserImpl.sourceToStatementStream(YangParserImpl.java:136)
at org.opendaylight.yangtools.yang.parser.impl.YangParserImpl.addSource(YangParserImpl.java:69)
at org.opendaylight.yangtools.yang.model.parser.api.YangParser.addSources(YangParser.java:80)
*no* further _formatting_ is done here
Is it possible to fix in any of the above versions since 4.x has major refactoring? We cannot continue to parse our yang model files due to this issue. It is a stopper.
//mikael
|
| Comments |
| Comment by Jamo Luhrsen [ 11/Mar/20 ] |
|
I lowered the priority here so it doesn't show up as a release blocker. |
| Comment by Robert Varga [ 17/Apr/20 ] |
|
a workaround would be to quote the string, I think |
| Comment by Robert Varga [ 17/Apr/20 ] |
|
The problem is STRING definition in YangParserLexer.g4. I am not sure how far back can we backport the fix – 2.1.x has been desupported some time ago. |
| Comment by Robert Varga [ 22/Jul/20 ] |
|
The fix causes a regression in the following construct: description "foo" +"bar"; this will need to be completely revisited, as the Lexer/Parser seem to have large number of other edge cases. |