Browse Source

- implemented grammar for XML literals

- removed most LL(1) conflicts from parser

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/vbnet@5949 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Siegfried Pammer 15 years ago
parent
commit
580a3d8c20
  1. 41
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/ExpressionFinder.atg
  2. 3237
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Parser.cs
  3. 1
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/PushParser.frame
  4. 12
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Test/ParserTests.cs
  5. 3
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Test/Program.cs

41
src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/ExpressionFinder.atg

@ -368,16 +368,32 @@ Block = @@ -368,16 +368,32 @@ Block =
(. PopContext(); .)
.
Expression =
(. nextTokenIsPotentialStartOfXmlMode = true; .)
(
Literal |
( "(" Expression ")" ) |
( Identifier [ "(" "Of" TypeName { "," TypeName } ")" ] ) |
( "AddressOf" Expression) |
( XmlOpenTag (. PushContext(Context.Xml, t); .) ANY XmlCloseTag (. PopContext(); .) )
)
Expression = SimpleExpressionWithSuffix. /* TODO: operators */
SimpleExpressionWithSuffix = SimpleExpression { ExpressionSuffix } .
SimpleExpression =
(. nextTokenIsPotentialStartOfXmlMode = true; .)
( Literal
| ( "(" Expression ")" )
| Identifier
| XmlLiteral
)
.
ExpressionSuffix =
"(" (. nextTokenIsPotentialStartOfXmlMode = true; .) ( "Of" TypeName { "," TypeName } ")" | ArgumentList ")" )
| "." IdentifierOrKeyword
.
XmlLiteral =
(. PushContext(Context.Xml, t); .)
{ XmlComment } XmlElement { XmlComment }
(. PopContext(); .)
.
XmlElement =
XmlOpenTag { ANY } ( XmlCloseTagEmptyElement | XmlCloseTag { ANY | XmlElement } XmlOpenEndTag { ANY } XmlCloseTag )
.
PrimitiveTypeName =
@ -448,10 +464,12 @@ RaiseEventStatement = @@ -448,10 +464,12 @@ RaiseEventStatement =
.
InvocationStatement =
(. Console.WriteLine("InvocationStatement"); .)
[ "Call" ] Expression [ ( "=" | "^=" | "*=" | "/=" | "\\=" | "+=" | "-=" | "&=" | ">=" ) Expression ]
.
ArgumentList =
(. Console.WriteLine("ArgumentList"); .)
Expression { "," Expression [ ":=" Expression ] }
.
@ -532,5 +550,4 @@ ParameterModifier = @@ -532,5 +550,4 @@ ParameterModifier =
"ParamArray"
.
END ExpressionFinder.
END ExpressionFinder .

3237
src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Parser.cs

File diff suppressed because it is too large Load Diff

1
src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/PushParser.frame

@ -60,6 +60,7 @@ partial class ExpressionFinder { @@ -60,6 +60,7 @@ partial class ExpressionFinder {
public void Advance()
{
Console.WriteLine("Advance");
InformToken(null);
}

12
src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Test/ParserTests.cs

@ -30,13 +30,13 @@ exit Global @@ -30,13 +30,13 @@ exit Global
);
}
[Test, Ignore]
[Test]
public void VariableWithXmlLiteral()
{
RunTest(
@"Class Test
Public Sub New()
Dim x = <a>
Dim x = <a />
End Sub
End Class
",
@ -58,23 +58,21 @@ exit Global @@ -58,23 +58,21 @@ exit Global
);
}
[Test, Ignore]
[Test]
public void MemberWithXmlLiteral()
{
RunTest(
@"Class Test
Private xml As XElement = <b>
Private xml As XElement = <b />
Public Sub New()
Dim x = <a>
Dim x = <a />
End Sub
End Class
",
@"enter Global
enter Type
enter Member
enter IdentifierExpected
exit IdentifierExpected
enter IdentifierExpected
exit IdentifierExpected
enter Xml

3
src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Test/Program.cs

@ -25,8 +25,9 @@ End Class @@ -25,8 +25,9 @@ End Class
public static void Main(string[] args)
{
ExpressionFinder p = new ExpressionFinder();
ILexer lexer = ParserFactory.CreateLexer(SupportedLanguage.VBNet, new StringReader(data));
ExpressionFinder p = new ExpressionFinder();
Token t;
do {
t = lexer.NextToken();

Loading…
Cancel
Save