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. 39
      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

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

@ -368,16 +368,32 @@ Block =
(. PopContext(); .) (. PopContext(); .)
. .
Expression = Expression = SimpleExpressionWithSuffix. /* TODO: operators */
(. nextTokenIsPotentialStartOfXmlMode = true; .)
(
Literal |
( "(" Expression ")" ) |
( Identifier [ "(" "Of" TypeName { "," TypeName } ")" ] ) |
( "AddressOf" Expression) |
( XmlOpenTag (. PushContext(Context.Xml, t); .) ANY XmlCloseTag (. PopContext(); .) ) 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 = PrimitiveTypeName =
@ -448,10 +464,12 @@ RaiseEventStatement =
. .
InvocationStatement = InvocationStatement =
(. Console.WriteLine("InvocationStatement"); .)
[ "Call" ] Expression [ ( "=" | "^=" | "*=" | "/=" | "\\=" | "+=" | "-=" | "&=" | ">=" ) Expression ] [ "Call" ] Expression [ ( "=" | "^=" | "*=" | "/=" | "\\=" | "+=" | "-=" | "&=" | ">=" ) Expression ]
. .
ArgumentList = ArgumentList =
(. Console.WriteLine("ArgumentList"); .)
Expression { "," Expression [ ":=" Expression ] } Expression { "," Expression [ ":=" Expression ] }
. .
@ -532,5 +550,4 @@ ParameterModifier =
"ParamArray" "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 {
public void Advance() public void Advance()
{ {
Console.WriteLine("Advance");
InformToken(null); InformToken(null);
} }

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

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

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

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

Loading…
Cancel
Save