Browse Source
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/vbnet@5798 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61pull/1/head
24 changed files with 3660 additions and 1679 deletions
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,780 @@
@@ -0,0 +1,780 @@
|
||||
using System.Collections; |
||||
using System.Collections.Generic; |
||||
using System.Collections.Specialized; |
||||
using System.Text; |
||||
using ICSharpCode.NRefactory.Ast; |
||||
using ICSharpCode.NRefactory.Parser.VB; |
||||
using ASTAttribute = ICSharpCode.NRefactory.Ast.Attribute; |
||||
using ICSharpCode.NRefactory.Parser.VBNet.Experimental; |
||||
|
||||
|
||||
|
||||
using System; |
||||
|
||||
namespace ICSharpCode.NRefactory.Parser.VBNet.Experimental { |
||||
|
||||
|
||||
|
||||
public partial class Parser { |
||||
public const int _EOF = 0; |
||||
public const int _EOL = 1; |
||||
public const int _ident = 2; |
||||
public const int _LiteralString = 3; |
||||
public const int _LiteralCharacter = 4; |
||||
public const int _LiteralInteger = 5; |
||||
public const int _LiteralDouble = 6; |
||||
public const int _LiteralSingle = 7; |
||||
public const int _LiteralDecimal = 8; |
||||
public const int _LiteralDate = 9; |
||||
public const int maxT = 222; |
||||
|
||||
const bool T = true; |
||||
const bool x = false; |
||||
const int minErrDist = 2; |
||||
|
||||
public ILexer lexer; |
||||
public Errors errors; |
||||
|
||||
public Parser(ILexer lexer) |
||||
{ |
||||
this.lexer = lexer; |
||||
this.errors = new Errors(); |
||||
} |
||||
|
||||
public Token t; // last recognized token
|
||||
public Token la; // lookahead token
|
||||
int errDist = minErrDist; |
||||
|
||||
|
||||
|
||||
void SynErr (int n) { |
||||
if (errDist >= minErrDist) errors.SynErr(la.line, la.col, n); |
||||
errDist = 0; |
||||
} |
||||
|
||||
public void SemErr (string msg) { |
||||
if (errDist >= minErrDist) errors.SemErr(t.line, t.col, msg); |
||||
errDist = 0; |
||||
} |
||||
|
||||
void Get () { |
||||
for (;;) { |
||||
t = la; |
||||
la = lexer.NextToken(); |
||||
if (la.kind <= maxT) { ++errDist; break; } |
||||
|
||||
la = t; |
||||
} |
||||
} |
||||
|
||||
void Expect (int n) { |
||||
if (la.kind==n) Get(); else { SynErr(n); } |
||||
} |
||||
|
||||
bool StartOf (int s) { |
||||
return set[s, la.kind]; |
||||
} |
||||
|
||||
void ExpectWeak (int n, int follow) { |
||||
if (la.kind == n) Get(); |
||||
else { |
||||
SynErr(n); |
||||
while (!StartOf(follow)) Get(); |
||||
} |
||||
} |
||||
|
||||
|
||||
bool WeakSeparator(int n, int syFol, int repFol) { |
||||
int kind = la.kind; |
||||
if (kind == n) {Get(); return true;} |
||||
else if (StartOf(repFol)) {return false;} |
||||
else { |
||||
SynErr(n); |
||||
while (!(set[syFol, kind] || set[repFol, kind] || set[0, kind])) { |
||||
Get(); |
||||
kind = la.kind; |
||||
} |
||||
return StartOf(syFol); |
||||
} |
||||
} |
||||
|
||||
|
||||
void ParserHelper() { |
||||
while (la.kind == 159) { |
||||
OptionStatement(); |
||||
} |
||||
while (la.kind == 124) { |
||||
ImportsStatement(); |
||||
} |
||||
while (la.kind == 1 || la.kind == 28) { |
||||
AttributeBlock(); |
||||
} |
||||
while (StartOf(1)) { |
||||
NamespaceMemberDeclaration(); |
||||
} |
||||
} |
||||
|
||||
void OptionStatement() { |
||||
Expect(159); |
||||
while (StartOf(2)) { |
||||
Get(); |
||||
} |
||||
StatementTerminator(); |
||||
} |
||||
|
||||
void ImportsStatement() { |
||||
Expect(124); |
||||
while (StartOf(2)) { |
||||
Get(); |
||||
} |
||||
StatementTerminator(); |
||||
} |
||||
|
||||
void AttributeBlock() { |
||||
Attribute(); |
||||
while (la.kind == 1 || la.kind == 28) { |
||||
Attribute(); |
||||
} |
||||
StatementTerminator(); |
||||
} |
||||
|
||||
void NamespaceMemberDeclaration() { |
||||
if (la.kind == 146) { |
||||
NamespaceDeclaration(); |
||||
} else if (StartOf(3)) { |
||||
TypeDeclaration(); |
||||
} else SynErr(223); |
||||
} |
||||
|
||||
void StatementTerminator() { |
||||
if (la.kind == 1) { |
||||
Get(); |
||||
} else if (la.kind == 11) { |
||||
Get(); |
||||
} else SynErr(224); |
||||
} |
||||
|
||||
void Attribute() { |
||||
if (la.kind == 1) { |
||||
Get(); |
||||
} |
||||
Expect(28); |
||||
while (StartOf(4)) { |
||||
Get(); |
||||
} |
||||
Expect(27); |
||||
if (la.kind == 1) { |
||||
Get(); |
||||
} |
||||
} |
||||
|
||||
void NamespaceDeclaration() { |
||||
Expect(146); |
||||
while (StartOf(2)) { |
||||
Get(); |
||||
} |
||||
StatementTerminator(); |
||||
while (StartOf(1)) { |
||||
NamespaceMemberDeclaration(); |
||||
} |
||||
Expect(100); |
||||
Expect(146); |
||||
StatementTerminator(); |
||||
} |
||||
|
||||
void TypeDeclaration() { |
||||
while (la.kind == 1 || la.kind == 28) { |
||||
AttributeBlock(); |
||||
} |
||||
while (StartOf(5)) { |
||||
TypeModifier(); |
||||
} |
||||
Expect(141); |
||||
while (StartOf(2)) { |
||||
Get(); |
||||
} |
||||
StatementTerminator(); |
||||
PushContext(Context.Type); |
||||
while (StartOf(6)) { |
||||
ModuleMemberDeclaration(); |
||||
} |
||||
Expect(100); |
||||
Expect(141); |
||||
StatementTerminator(); |
||||
PopContext(); |
||||
} |
||||
|
||||
void TypeModifier() { |
||||
if (StartOf(7)) { |
||||
AccessModifier(); |
||||
} else if (la.kind == 184) { |
||||
Get(); |
||||
} else SynErr(225); |
||||
} |
||||
|
||||
void ModuleMemberDeclaration() { |
||||
PushContext(Context.Member); |
||||
SubOrFunctionDeclaration(); |
||||
PopContext(); |
||||
} |
||||
|
||||
void SubOrFunctionDeclaration() { |
||||
while (la.kind == 1 || la.kind == 28) { |
||||
AttributeBlock(); |
||||
} |
||||
while (StartOf(8)) { |
||||
MemberModifier(); |
||||
} |
||||
if (la.kind == 195) { |
||||
Get(); |
||||
} else if (la.kind == 114) { |
||||
Get(); |
||||
} else SynErr(226); |
||||
PushContext(Context.IdentifierExpected); |
||||
Get(); |
||||
PopContext(); |
||||
if (la.kind == 25) { |
||||
Get(); |
||||
if (StartOf(9)) { |
||||
ParameterList(); |
||||
} |
||||
Expect(26); |
||||
} |
||||
Expect(1); |
||||
if (la.kind == 1) { |
||||
Block(); |
||||
} |
||||
Expect(100); |
||||
if (la.kind == 195) { |
||||
Get(); |
||||
} else if (la.kind == 114) { |
||||
Get(); |
||||
} else SynErr(227); |
||||
StatementTerminator(); |
||||
} |
||||
|
||||
void MemberModifier() { |
||||
switch (la.kind) { |
||||
case 112: case 170: case 172: case 173: { |
||||
AccessModifier(); |
||||
break; |
||||
} |
||||
case 184: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 185: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 165: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 153: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 166: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 164: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 168: { |
||||
Get(); |
||||
break; |
||||
} |
||||
default: SynErr(228); break; |
||||
} |
||||
} |
||||
|
||||
void ParameterList() { |
||||
Parameter(); |
||||
while (la.kind == 12) { |
||||
Get(); |
||||
Parameter(); |
||||
} |
||||
} |
||||
|
||||
void Block() { |
||||
Expect(1); |
||||
} |
||||
|
||||
void Parameter() { |
||||
while (la.kind == 1 || la.kind == 28) { |
||||
AttributeBlock(); |
||||
} |
||||
while (StartOf(10)) { |
||||
ParameterModifier(); |
||||
} |
||||
Identifier(); |
||||
if (la.kind == 50) { |
||||
Get(); |
||||
Get(); |
||||
} |
||||
if (la.kind == 10) { |
||||
Get(); |
||||
while (StartOf(11)) { |
||||
Get(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
void ParameterModifier() { |
||||
if (la.kind == 59) { |
||||
Get(); |
||||
} else if (la.kind == 56) { |
||||
Get(); |
||||
} else if (la.kind == 160) { |
||||
Get(); |
||||
} else if (la.kind == 167) { |
||||
Get(); |
||||
} else SynErr(229); |
||||
} |
||||
|
||||
void Identifier() { |
||||
PushContext(Context.IdentifierExpected); |
||||
if (StartOf(12)) { |
||||
IdentifierForFieldDeclaration(); |
||||
} else if (la.kind == 85) { |
||||
Get(); |
||||
} else SynErr(230); |
||||
PopContext(); |
||||
} |
||||
|
||||
void IdentifierForFieldDeclaration() { |
||||
switch (la.kind) { |
||||
case 2: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 45: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 49: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 51: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 52: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 53: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 54: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 57: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 74: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 91: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 94: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 103: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 108: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 113: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 120: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 126: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 130: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 133: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 156: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 162: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 169: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 188: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 197: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 198: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 208: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 209: { |
||||
Get(); |
||||
break; |
||||
} |
||||
case 215: { |
||||
Get(); |
||||
break; |
||||
} |
||||
default: SynErr(231); break; |
||||
} |
||||
} |
||||
|
||||
void AccessModifier() { |
||||
if (la.kind == 173) { |
||||
Get(); |
||||
} else if (la.kind == 112) { |
||||
Get(); |
||||
} else if (la.kind == 172) { |
||||
Get(); |
||||
if (la.kind == 112) { |
||||
Get(); |
||||
} |
||||
} else if (la.kind == 170) { |
||||
Get(); |
||||
} else SynErr(232); |
||||
} |
||||
|
||||
|
||||
|
||||
public void Parse() { |
||||
PushContext(Context.Global); |
||||
la = new Token(1, 1, 1); |
||||
Get(); |
||||
ParserHelper(); |
||||
|
||||
Expect(0); |
||||
PopContext(); |
||||
} |
||||
|
||||
static readonly bool[,] set = { |
||||
{T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x}, |
||||
{x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x}, |
||||
{x,x,T,T, T,T,T,T, T,T,T,x, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,x}, |
||||
{x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x}, |
||||
{x,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,x, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,x}, |
||||
{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x}, |
||||
{x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, T,T,T,x, T,x,T,x, T,T,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x}, |
||||
{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x}, |
||||
{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, T,T,T,x, T,x,T,x, T,T,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x}, |
||||
{x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,T,x,T, T,T,T,x, T,T,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,T, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, T,x,x,x, x,T,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, T,x,T,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,T, x,x,x,x, x,x,x,x}, |
||||
{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x}, |
||||
{x,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,x}, |
||||
{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,T,x,T, T,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, T,x,x,x, x,T,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,T, x,x,x,x, x,x,x,x} |
||||
|
||||
}; |
||||
} // end Parser
|
||||
|
||||
|
||||
public class Errors { |
||||
public int count = 0; // number of errors detected
|
||||
public System.IO.TextWriter errorStream = Console.Out; // error messages go to this stream
|
||||
public string errMsgFormat = "-- line {0} col {1}: {2}"; // 0=line, 1=column, 2=text
|
||||
|
||||
public void SynErr (int line, int col, int n) { |
||||
string s; |
||||
switch (n) { |
||||
case 0: s = "EOF expected"; break; |
||||
case 1: s = "EOL expected"; break; |
||||
case 2: s = "ident expected"; break; |
||||
case 3: s = "LiteralString expected"; break; |
||||
case 4: s = "LiteralCharacter expected"; break; |
||||
case 5: s = "LiteralInteger expected"; break; |
||||
case 6: s = "LiteralDouble expected"; break; |
||||
case 7: s = "LiteralSingle expected"; break; |
||||
case 8: s = "LiteralDecimal expected"; break; |
||||
case 9: s = "LiteralDate expected"; break; |
||||
case 10: s = "\"=\" expected"; break; |
||||
case 11: s = "\":\" expected"; break; |
||||
case 12: s = "\",\" expected"; break; |
||||
case 13: s = "\"&\" expected"; break; |
||||
case 14: s = "\"/\" expected"; break; |
||||
case 15: s = "\"\\\\\" expected"; break; |
||||
case 16: s = "\".\" expected"; break; |
||||
case 17: s = "\"!\" expected"; break; |
||||
case 18: s = "\"-\" expected"; break; |
||||
case 19: s = "\"+\" expected"; break; |
||||
case 20: s = "\"^\" expected"; break; |
||||
case 21: s = "\"?\" expected"; break; |
||||
case 22: s = "\"*\" expected"; break; |
||||
case 23: s = "\"{\" expected"; break; |
||||
case 24: s = "\"}\" expected"; break; |
||||
case 25: s = "\"(\" expected"; break; |
||||
case 26: s = "\")\" expected"; break; |
||||
case 27: s = "\">\" expected"; break; |
||||
case 28: s = "\"<\" expected"; break; |
||||
case 29: s = "\"<>\" expected"; break; |
||||
case 30: s = "\">=\" expected"; break; |
||||
case 31: s = "\"<=\" expected"; break; |
||||
case 32: s = "\"<<\" expected"; break; |
||||
case 33: s = "\">>\" expected"; break; |
||||
case 34: s = "\"+=\" expected"; break; |
||||
case 35: s = "\"^=\" expected"; break; |
||||
case 36: s = "\"-=\" expected"; break; |
||||
case 37: s = "\"*=\" expected"; break; |
||||
case 38: s = "\"/=\" expected"; break; |
||||
case 39: s = "\"\\\\=\" expected"; break; |
||||
case 40: s = "\"<<=\" expected"; break; |
||||
case 41: s = "\">>=\" expected"; break; |
||||
case 42: s = "\"&=\" expected"; break; |
||||
case 43: s = "\"AddHandler\" expected"; break; |
||||
case 44: s = "\"AddressOf\" expected"; break; |
||||
case 45: s = "\"Aggregate\" expected"; break; |
||||
case 46: s = "\"Alias\" expected"; break; |
||||
case 47: s = "\"And\" expected"; break; |
||||
case 48: s = "\"AndAlso\" expected"; break; |
||||
case 49: s = "\"Ansi\" expected"; break; |
||||
case 50: s = "\"As\" expected"; break; |
||||
case 51: s = "\"Ascending\" expected"; break; |
||||
case 52: s = "\"Assembly\" expected"; break; |
||||
case 53: s = "\"Auto\" expected"; break; |
||||
case 54: s = "\"Binary\" expected"; break; |
||||
case 55: s = "\"Boolean\" expected"; break; |
||||
case 56: s = "\"ByRef\" expected"; break; |
||||
case 57: s = "\"By\" expected"; break; |
||||
case 58: s = "\"Byte\" expected"; break; |
||||
case 59: s = "\"ByVal\" expected"; break; |
||||
case 60: s = "\"Call\" expected"; break; |
||||
case 61: s = "\"Case\" expected"; break; |
||||
case 62: s = "\"Catch\" expected"; break; |
||||
case 63: s = "\"CBool\" expected"; break; |
||||
case 64: s = "\"CByte\" expected"; break; |
||||
case 65: s = "\"CChar\" expected"; break; |
||||
case 66: s = "\"CDate\" expected"; break; |
||||
case 67: s = "\"CDbl\" expected"; break; |
||||
case 68: s = "\"CDec\" expected"; break; |
||||
case 69: s = "\"Char\" expected"; break; |
||||
case 70: s = "\"CInt\" expected"; break; |
||||
case 71: s = "\"Class\" expected"; break; |
||||
case 72: s = "\"CLng\" expected"; break; |
||||
case 73: s = "\"CObj\" expected"; break; |
||||
case 74: s = "\"Compare\" expected"; break; |
||||
case 75: s = "\"Const\" expected"; break; |
||||
case 76: s = "\"Continue\" expected"; break; |
||||
case 77: s = "\"CSByte\" expected"; break; |
||||
case 78: s = "\"CShort\" expected"; break; |
||||
case 79: s = "\"CSng\" expected"; break; |
||||
case 80: s = "\"CStr\" expected"; break; |
||||
case 81: s = "\"CType\" expected"; break; |
||||
case 82: s = "\"CUInt\" expected"; break; |
||||
case 83: s = "\"CULng\" expected"; break; |
||||
case 84: s = "\"CUShort\" expected"; break; |
||||
case 85: s = "\"Custom\" expected"; break; |
||||
case 86: s = "\"Date\" expected"; break; |
||||
case 87: s = "\"Decimal\" expected"; break; |
||||
case 88: s = "\"Declare\" expected"; break; |
||||
case 89: s = "\"Default\" expected"; break; |
||||
case 90: s = "\"Delegate\" expected"; break; |
||||
case 91: s = "\"Descending\" expected"; break; |
||||
case 92: s = "\"Dim\" expected"; break; |
||||
case 93: s = "\"DirectCast\" expected"; break; |
||||
case 94: s = "\"Distinct\" expected"; break; |
||||
case 95: s = "\"Do\" expected"; break; |
||||
case 96: s = "\"Double\" expected"; break; |
||||
case 97: s = "\"Each\" expected"; break; |
||||
case 98: s = "\"Else\" expected"; break; |
||||
case 99: s = "\"ElseIf\" expected"; break; |
||||
case 100: s = "\"End\" expected"; break; |
||||
case 101: s = "\"EndIf\" expected"; break; |
||||
case 102: s = "\"Enum\" expected"; break; |
||||
case 103: s = "\"Equals\" expected"; break; |
||||
case 104: s = "\"Erase\" expected"; break; |
||||
case 105: s = "\"Error\" expected"; break; |
||||
case 106: s = "\"Event\" expected"; break; |
||||
case 107: s = "\"Exit\" expected"; break; |
||||
case 108: s = "\"Explicit\" expected"; break; |
||||
case 109: s = "\"False\" expected"; break; |
||||
case 110: s = "\"Finally\" expected"; break; |
||||
case 111: s = "\"For\" expected"; break; |
||||
case 112: s = "\"Friend\" expected"; break; |
||||
case 113: s = "\"From\" expected"; break; |
||||
case 114: s = "\"Function\" expected"; break; |
||||
case 115: s = "\"Get\" expected"; break; |
||||
case 116: s = "\"GetType\" expected"; break; |
||||
case 117: s = "\"Global\" expected"; break; |
||||
case 118: s = "\"GoSub\" expected"; break; |
||||
case 119: s = "\"GoTo\" expected"; break; |
||||
case 120: s = "\"Group\" expected"; break; |
||||
case 121: s = "\"Handles\" expected"; break; |
||||
case 122: s = "\"If\" expected"; break; |
||||
case 123: s = "\"Implements\" expected"; break; |
||||
case 124: s = "\"Imports\" expected"; break; |
||||
case 125: s = "\"In\" expected"; break; |
||||
case 126: s = "\"Infer\" expected"; break; |
||||
case 127: s = "\"Inherits\" expected"; break; |
||||
case 128: s = "\"Integer\" expected"; break; |
||||
case 129: s = "\"Interface\" expected"; break; |
||||
case 130: s = "\"Into\" expected"; break; |
||||
case 131: s = "\"Is\" expected"; break; |
||||
case 132: s = "\"IsNot\" expected"; break; |
||||
case 133: s = "\"Join\" expected"; break; |
||||
case 134: s = "\"Let\" expected"; break; |
||||
case 135: s = "\"Lib\" expected"; break; |
||||
case 136: s = "\"Like\" expected"; break; |
||||
case 137: s = "\"Long\" expected"; break; |
||||
case 138: s = "\"Loop\" expected"; break; |
||||
case 139: s = "\"Me\" expected"; break; |
||||
case 140: s = "\"Mod\" expected"; break; |
||||
case 141: s = "\"Module\" expected"; break; |
||||
case 142: s = "\"MustInherit\" expected"; break; |
||||
case 143: s = "\"MustOverride\" expected"; break; |
||||
case 144: s = "\"MyBase\" expected"; break; |
||||
case 145: s = "\"MyClass\" expected"; break; |
||||
case 146: s = "\"Namespace\" expected"; break; |
||||
case 147: s = "\"Narrowing\" expected"; break; |
||||
case 148: s = "\"New\" expected"; break; |
||||
case 149: s = "\"Next\" expected"; break; |
||||
case 150: s = "\"Not\" expected"; break; |
||||
case 151: s = "\"Nothing\" expected"; break; |
||||
case 152: s = "\"NotInheritable\" expected"; break; |
||||
case 153: s = "\"NotOverridable\" expected"; break; |
||||
case 154: s = "\"Object\" expected"; break; |
||||
case 155: s = "\"Of\" expected"; break; |
||||
case 156: s = "\"Off\" expected"; break; |
||||
case 157: s = "\"On\" expected"; break; |
||||
case 158: s = "\"Operator\" expected"; break; |
||||
case 159: s = "\"Option\" expected"; break; |
||||
case 160: s = "\"Optional\" expected"; break; |
||||
case 161: s = "\"Or\" expected"; break; |
||||
case 162: s = "\"Order\" expected"; break; |
||||
case 163: s = "\"OrElse\" expected"; break; |
||||
case 164: s = "\"Overloads\" expected"; break; |
||||
case 165: s = "\"Overridable\" expected"; break; |
||||
case 166: s = "\"Overrides\" expected"; break; |
||||
case 167: s = "\"ParamArray\" expected"; break; |
||||
case 168: s = "\"Partial\" expected"; break; |
||||
case 169: s = "\"Preserve\" expected"; break; |
||||
case 170: s = "\"Private\" expected"; break; |
||||
case 171: s = "\"Property\" expected"; break; |
||||
case 172: s = "\"Protected\" expected"; break; |
||||
case 173: s = "\"Public\" expected"; break; |
||||
case 174: s = "\"RaiseEvent\" expected"; break; |
||||
case 175: s = "\"ReadOnly\" expected"; break; |
||||
case 176: s = "\"ReDim\" expected"; break; |
||||
case 177: s = "\"Rem\" expected"; break; |
||||
case 178: s = "\"RemoveHandler\" expected"; break; |
||||
case 179: s = "\"Resume\" expected"; break; |
||||
case 180: s = "\"Return\" expected"; break; |
||||
case 181: s = "\"SByte\" expected"; break; |
||||
case 182: s = "\"Select\" expected"; break; |
||||
case 183: s = "\"Set\" expected"; break; |
||||
case 184: s = "\"Shadows\" expected"; break; |
||||
case 185: s = "\"Shared\" expected"; break; |
||||
case 186: s = "\"Short\" expected"; break; |
||||
case 187: s = "\"Single\" expected"; break; |
||||
case 188: s = "\"Skip\" expected"; break; |
||||
case 189: s = "\"Static\" expected"; break; |
||||
case 190: s = "\"Step\" expected"; break; |
||||
case 191: s = "\"Stop\" expected"; break; |
||||
case 192: s = "\"Strict\" expected"; break; |
||||
case 193: s = "\"String\" expected"; break; |
||||
case 194: s = "\"Structure\" expected"; break; |
||||
case 195: s = "\"Sub\" expected"; break; |
||||
case 196: s = "\"SyncLock\" expected"; break; |
||||
case 197: s = "\"Take\" expected"; break; |
||||
case 198: s = "\"Text\" expected"; break; |
||||
case 199: s = "\"Then\" expected"; break; |
||||
case 200: s = "\"Throw\" expected"; break; |
||||
case 201: s = "\"To\" expected"; break; |
||||
case 202: s = "\"True\" expected"; break; |
||||
case 203: s = "\"Try\" expected"; break; |
||||
case 204: s = "\"TryCast\" expected"; break; |
||||
case 205: s = "\"TypeOf\" expected"; break; |
||||
case 206: s = "\"UInteger\" expected"; break; |
||||
case 207: s = "\"ULong\" expected"; break; |
||||
case 208: s = "\"Unicode\" expected"; break; |
||||
case 209: s = "\"Until\" expected"; break; |
||||
case 210: s = "\"UShort\" expected"; break; |
||||
case 211: s = "\"Using\" expected"; break; |
||||
case 212: s = "\"Variant\" expected"; break; |
||||
case 213: s = "\"Wend\" expected"; break; |
||||
case 214: s = "\"When\" expected"; break; |
||||
case 215: s = "\"Where\" expected"; break; |
||||
case 216: s = "\"While\" expected"; break; |
||||
case 217: s = "\"Widening\" expected"; break; |
||||
case 218: s = "\"With\" expected"; break; |
||||
case 219: s = "\"WithEvents\" expected"; break; |
||||
case 220: s = "\"WriteOnly\" expected"; break; |
||||
case 221: s = "\"Xor\" expected"; break; |
||||
case 222: s = "??? expected"; break; |
||||
case 223: s = "invalid NamespaceMemberDeclaration"; break; |
||||
case 224: s = "invalid StatementTerminator"; break; |
||||
case 225: s = "invalid TypeModifier"; break; |
||||
case 226: s = "invalid SubOrFunctionDeclaration"; break; |
||||
case 227: s = "invalid SubOrFunctionDeclaration"; break; |
||||
case 228: s = "invalid MemberModifier"; break; |
||||
case 229: s = "invalid ParameterModifier"; break; |
||||
case 230: s = "invalid Identifier"; break; |
||||
case 231: s = "invalid IdentifierForFieldDeclaration"; break; |
||||
case 232: s = "invalid AccessModifier"; break; |
||||
|
||||
default: s = "error " + n; break; |
||||
} |
||||
errorStream.WriteLine(errMsgFormat, line, col, s); |
||||
count++; |
||||
} |
||||
|
||||
public void SemErr (int line, int col, string s) { |
||||
errorStream.WriteLine(errMsgFormat, line, col, s); |
||||
count++; |
||||
} |
||||
|
||||
public void SemErr (string s) { |
||||
errorStream.WriteLine(s); |
||||
count++; |
||||
} |
||||
|
||||
public void Warning (int line, int col, string s) { |
||||
errorStream.WriteLine(errMsgFormat, line, col, s); |
||||
} |
||||
|
||||
public void Warning(string s) { |
||||
errorStream.WriteLine(s); |
||||
} |
||||
} // Errors
|
||||
|
||||
|
||||
public class FatalError: Exception { |
||||
public FatalError(string m): base(m) {} |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,161 @@
@@ -0,0 +1,161 @@
|
||||
/*---------------------------------------------------------------------- |
||||
Compiler Generator Coco/R, |
||||
Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz |
||||
extended by M. Loeberbauer & A. Woess, Univ. of Linz |
||||
with improvements by Pat Terry, Rhodes University |
||||
|
||||
This program is free software; you can redistribute it and/or modify it |
||||
under the terms of the GNU General Public License as published by the |
||||
Free Software Foundation; either version 2, or (at your option) any |
||||
later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, but |
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
||||
for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License along |
||||
with this program; if not, write to the Free Software Foundation, Inc., |
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
||||
|
||||
As an exception, it is allowed to write an extension of Coco/R that is |
||||
used as a plugin in non-free software. |
||||
|
||||
If not otherwise stated, any source code generated by Coco/R (other than |
||||
Coco/R itself) does not fall under the GNU General Public License. |
||||
----------------------------------------------------------------------*/ |
||||
-->begin |
||||
using System; |
||||
|
||||
-->namespace |
||||
|
||||
public partial class Parser { |
||||
-->constants |
||||
const bool T = true; |
||||
const bool x = false; |
||||
const int minErrDist = 2; |
||||
|
||||
public ILexer lexer; |
||||
public Errors errors; |
||||
|
||||
public Parser(ILexer lexer) |
||||
{ |
||||
this.lexer = lexer; |
||||
this.errors = new Errors(); |
||||
} |
||||
|
||||
public Token t; // last recognized token |
||||
public Token la; // lookahead token |
||||
int errDist = minErrDist; |
||||
|
||||
-->declarations |
||||
|
||||
void SynErr (int n) { |
||||
if (errDist >= minErrDist) errors.SynErr(la.line, la.col, n); |
||||
errDist = 0; |
||||
} |
||||
|
||||
public void SemErr (string msg) { |
||||
if (errDist >= minErrDist) errors.SemErr(t.line, t.col, msg); |
||||
errDist = 0; |
||||
} |
||||
|
||||
void Get () { |
||||
for (;;) { |
||||
t = la; |
||||
la = lexer.NextToken(); |
||||
if (la.kind <= maxT) { ++errDist; break; } |
||||
-->pragmas |
||||
la = t; |
||||
} |
||||
} |
||||
|
||||
void Expect (int n) { |
||||
if (la.kind==n) Get(); else { SynErr(n); } |
||||
} |
||||
|
||||
bool StartOf (int s) { |
||||
return set[s, la.kind]; |
||||
} |
||||
|
||||
void ExpectWeak (int n, int follow) { |
||||
if (la.kind == n) Get(); |
||||
else { |
||||
SynErr(n); |
||||
while (!StartOf(follow)) Get(); |
||||
} |
||||
} |
||||
|
||||
|
||||
bool WeakSeparator(int n, int syFol, int repFol) { |
||||
int kind = la.kind; |
||||
if (kind == n) {Get(); return true;} |
||||
else if (StartOf(repFol)) {return false;} |
||||
else { |
||||
SynErr(n); |
||||
while (!(set[syFol, kind] || set[repFol, kind] || set[0, kind])) { |
||||
Get(); |
||||
kind = la.kind; |
||||
} |
||||
return StartOf(syFol); |
||||
} |
||||
} |
||||
|
||||
|
||||
-->productions |
||||
|
||||
public void Parse() { |
||||
PushContext(Context.Global); |
||||
la = new Token(1, 1, 1); |
||||
Get(); |
||||
-->parseRoot |
||||
Expect(0); |
||||
PopContext(); |
||||
} |
||||
|
||||
static readonly bool[,] set = { |
||||
-->initialization |
||||
}; |
||||
} // end Parser |
||||
|
||||
|
||||
public class Errors { |
||||
public int count = 0; // number of errors detected |
||||
public System.IO.TextWriter errorStream = Console.Out; // error messages go to this stream |
||||
public string errMsgFormat = "-- line {0} col {1}: {2}"; // 0=line, 1=column, 2=text |
||||
|
||||
public void SynErr (int line, int col, int n) { |
||||
string s; |
||||
switch (n) { |
||||
-->errors |
||||
default: s = "error " + n; break; |
||||
} |
||||
errorStream.WriteLine(errMsgFormat, line, col, s); |
||||
count++; |
||||
} |
||||
|
||||
public void SemErr (int line, int col, string s) { |
||||
errorStream.WriteLine(errMsgFormat, line, col, s); |
||||
count++; |
||||
} |
||||
|
||||
public void SemErr (string s) { |
||||
errorStream.WriteLine(s); |
||||
count++; |
||||
} |
||||
|
||||
public void Warning (int line, int col, string s) { |
||||
errorStream.WriteLine(errMsgFormat, line, col, s); |
||||
} |
||||
|
||||
public void Warning(string s) { |
||||
errorStream.WriteLine(s); |
||||
} |
||||
} // Errors |
||||
|
||||
|
||||
public class FatalError: Exception { |
||||
public FatalError(string m): base(m) {} |
||||
} |
||||
|
||||
$$$ |
||||
@ -0,0 +1,390 @@
@@ -0,0 +1,390 @@
|
||||
using System.Collections; |
||||
using System.Collections.Generic; |
||||
using System.Collections.Specialized; |
||||
using System.Text; |
||||
using ICSharpCode.NRefactory.Ast; |
||||
using ICSharpCode.NRefactory.Parser.VB; |
||||
using ASTAttribute = ICSharpCode.NRefactory.Ast.Attribute; |
||||
using ICSharpCode.NRefactory.Parser.VBNet.Experimental; |
||||
|
||||
COMPILER ParserHelper |
||||
|
||||
/* START AUTOGENERATED TOKENS SECTION */ |
||||
TOKENS |
||||
/* ----- terminal classes ----- */ |
||||
/* EOF is 0 */ |
||||
EOL |
||||
ident |
||||
LiteralString |
||||
LiteralCharacter |
||||
LiteralInteger |
||||
LiteralDouble |
||||
LiteralSingle |
||||
LiteralDecimal |
||||
LiteralDate |
||||
|
||||
/* ----- special character ----- */ |
||||
"=" |
||||
":" |
||||
"," |
||||
"&" |
||||
"/" |
||||
"\\" |
||||
"." |
||||
"!" |
||||
"-" |
||||
"+" |
||||
"^" |
||||
"?" |
||||
"*" |
||||
"{" |
||||
"}" |
||||
"(" |
||||
")" |
||||
">" |
||||
"<" |
||||
"<>" |
||||
">=" |
||||
"<=" |
||||
"<<" |
||||
">>" |
||||
"+=" |
||||
"^=" |
||||
"-=" |
||||
"*=" |
||||
"/=" |
||||
"\\=" |
||||
"<<=" |
||||
">>=" |
||||
"&=" |
||||
|
||||
/* ----- keywords ----- */ |
||||
"AddHandler" |
||||
"AddressOf" |
||||
"Aggregate" |
||||
"Alias" |
||||
"And" |
||||
"AndAlso" |
||||
"Ansi" |
||||
"As" |
||||
"Ascending" |
||||
"Assembly" |
||||
"Auto" |
||||
"Binary" |
||||
"Boolean" |
||||
"ByRef" |
||||
"By" |
||||
"Byte" |
||||
"ByVal" |
||||
"Call" |
||||
"Case" |
||||
"Catch" |
||||
"CBool" |
||||
"CByte" |
||||
"CChar" |
||||
"CDate" |
||||
"CDbl" |
||||
"CDec" |
||||
"Char" |
||||
"CInt" |
||||
"Class" |
||||
"CLng" |
||||
"CObj" |
||||
"Compare" |
||||
"Const" |
||||
"Continue" |
||||
"CSByte" |
||||
"CShort" |
||||
"CSng" |
||||
"CStr" |
||||
"CType" |
||||
"CUInt" |
||||
"CULng" |
||||
"CUShort" |
||||
"Custom" |
||||
"Date" |
||||
"Decimal" |
||||
"Declare" |
||||
"Default" |
||||
"Delegate" |
||||
"Descending" |
||||
"Dim" |
||||
"DirectCast" |
||||
"Distinct" |
||||
"Do" |
||||
"Double" |
||||
"Each" |
||||
"Else" |
||||
"ElseIf" |
||||
"End" |
||||
"EndIf" |
||||
"Enum" |
||||
"Equals" |
||||
"Erase" |
||||
"Error" |
||||
"Event" |
||||
"Exit" |
||||
"Explicit" |
||||
"False" |
||||
"Finally" |
||||
"For" |
||||
"Friend" |
||||
"From" |
||||
"Function" |
||||
"Get" |
||||
"GetType" |
||||
"Global" |
||||
"GoSub" |
||||
"GoTo" |
||||
"Group" |
||||
"Handles" |
||||
"If" |
||||
"Implements" |
||||
"Imports" |
||||
"In" |
||||
"Infer" |
||||
"Inherits" |
||||
"Integer" |
||||
"Interface" |
||||
"Into" |
||||
"Is" |
||||
"IsNot" |
||||
"Join" |
||||
"Let" |
||||
"Lib" |
||||
"Like" |
||||
"Long" |
||||
"Loop" |
||||
"Me" |
||||
"Mod" |
||||
"Module" |
||||
"MustInherit" |
||||
"MustOverride" |
||||
"MyBase" |
||||
"MyClass" |
||||
"Namespace" |
||||
"Narrowing" |
||||
"New" |
||||
"Next" |
||||
"Not" |
||||
"Nothing" |
||||
"NotInheritable" |
||||
"NotOverridable" |
||||
"Object" |
||||
"Of" |
||||
"Off" |
||||
"On" |
||||
"Operator" |
||||
"Option" |
||||
"Optional" |
||||
"Or" |
||||
"Order" |
||||
"OrElse" |
||||
"Overloads" |
||||
"Overridable" |
||||
"Overrides" |
||||
"ParamArray" |
||||
"Partial" |
||||
"Preserve" |
||||
"Private" |
||||
"Property" |
||||
"Protected" |
||||
"Public" |
||||
"RaiseEvent" |
||||
"ReadOnly" |
||||
"ReDim" |
||||
"Rem" |
||||
"RemoveHandler" |
||||
"Resume" |
||||
"Return" |
||||
"SByte" |
||||
"Select" |
||||
"Set" |
||||
"Shadows" |
||||
"Shared" |
||||
"Short" |
||||
"Single" |
||||
"Skip" |
||||
"Static" |
||||
"Step" |
||||
"Stop" |
||||
"Strict" |
||||
"String" |
||||
"Structure" |
||||
"Sub" |
||||
"SyncLock" |
||||
"Take" |
||||
"Text" |
||||
"Then" |
||||
"Throw" |
||||
"To" |
||||
"True" |
||||
"Try" |
||||
"TryCast" |
||||
"TypeOf" |
||||
"UInteger" |
||||
"ULong" |
||||
"Unicode" |
||||
"Until" |
||||
"UShort" |
||||
"Using" |
||||
"Variant" |
||||
"Wend" |
||||
"When" |
||||
"Where" |
||||
"While" |
||||
"Widening" |
||||
"With" |
||||
"WithEvents" |
||||
"WriteOnly" |
||||
"Xor" |
||||
/* END AUTOGENERATED TOKENS SECTION */ |
||||
|
||||
PRODUCTIONS |
||||
/*------------------------------------------------------------------------*/ |
||||
ParserHelper = |
||||
{ OptionStatement } |
||||
{ ImportsStatement } |
||||
{ AttributeBlock } |
||||
{ NamespaceMemberDeclaration } |
||||
. |
||||
|
||||
StatementTerminator = EOL | ":" . |
||||
|
||||
OptionStatement = |
||||
"Option" { ANY } StatementTerminator |
||||
. |
||||
|
||||
ImportsStatement = |
||||
"Imports" { ANY } StatementTerminator |
||||
. |
||||
|
||||
AttributeBlock = |
||||
Attribute { Attribute } StatementTerminator |
||||
. |
||||
|
||||
Attribute = |
||||
[ EOL ] "<" { ANY } ">" [ EOL ] |
||||
. |
||||
|
||||
NamespaceMemberDeclaration = |
||||
NamespaceDeclaration | TypeDeclaration |
||||
. |
||||
|
||||
NamespaceDeclaration = |
||||
"Namespace" { ANY } StatementTerminator |
||||
{ NamespaceMemberDeclaration } |
||||
"End" "Namespace" StatementTerminator |
||||
. |
||||
|
||||
TypeDeclaration = |
||||
{ AttributeBlock } |
||||
{ TypeModifier } |
||||
"Module" { ANY } StatementTerminator |
||||
(. PushContext(Context.Type); .) |
||||
{ ModuleMemberDeclaration } |
||||
"End" "Module" StatementTerminator |
||||
(. PopContext(); .) |
||||
. |
||||
|
||||
ModuleMemberDeclaration |
||||
(. PushContext(Context.Member); .) |
||||
= |
||||
SubOrFunctionDeclaration |
||||
(. PopContext(); .) |
||||
. |
||||
|
||||
SubOrFunctionDeclaration = |
||||
{ AttributeBlock } { MemberModifier } ("Sub" | "Function") |
||||
(. PushContext(Context.IdentifierExpected); .) ANY (. PopContext(); .) |
||||
[ "(" [ ParameterList ] ")" ] EOL |
||||
[ Block ] |
||||
"End" ("Sub" | "Function") StatementTerminator |
||||
. |
||||
|
||||
ParameterList = |
||||
Parameter { "," Parameter } |
||||
. |
||||
|
||||
Parameter = |
||||
{ AttributeBlock } { ParameterModifier } Identifier [ "As" ANY ] [ "=" { ANY } ] |
||||
. |
||||
|
||||
Block = |
||||
EOL |
||||
. |
||||
|
||||
/* This production handles pseudo keywords that are needed in the grammar */ |
||||
Identifier |
||||
(. PushContext(Context.IdentifierExpected); .) |
||||
= |
||||
( |
||||
IdentifierForFieldDeclaration |
||||
| |
||||
"Custom" |
||||
) |
||||
(. PopContext(); .) |
||||
. |
||||
|
||||
IdentifierForFieldDeclaration = |
||||
ident |
||||
| "Aggregate" |
||||
| "Ansi" |
||||
| "Ascending" |
||||
| "Assembly" |
||||
| "Auto" |
||||
| "Binary" |
||||
| "By" |
||||
| "Compare" |
||||
| "Descending" |
||||
| "Distinct" |
||||
| "Equals" |
||||
| "Explicit" |
||||
| "From" |
||||
| "Group" |
||||
| "Infer" |
||||
| "Into" |
||||
| "Join" |
||||
| "Off" |
||||
| "Order" |
||||
| "Preserve" |
||||
| "Skip" |
||||
| "Take" |
||||
| "Text" |
||||
| "Unicode" |
||||
| "Until" |
||||
| "Where" |
||||
. |
||||
|
||||
AccessModifier = |
||||
"Public" | |
||||
"Friend" | |
||||
"Protected" [ "Friend" ] | |
||||
"Private" |
||||
. |
||||
|
||||
TypeModifier = |
||||
AccessModifier | |
||||
"Shadows" |
||||
. |
||||
|
||||
MemberModifier = |
||||
AccessModifier | |
||||
"Shadows" | |
||||
"Shared" | |
||||
"Overridable" | |
||||
"NotOverridable" | |
||||
"Overrides" | |
||||
"Overloads" | |
||||
"Partial" |
||||
. |
||||
|
||||
ParameterModifier = |
||||
"ByVal" | |
||||
"ByRef" | |
||||
"Optional" | |
||||
"ParamArray" |
||||
. |
||||
|
||||
END ParserHelper. |
||||
|
||||
@ -0,0 +1,48 @@
@@ -0,0 +1,48 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt"/>
|
||||
// <license see="prj:///doc/license.txt"/>
|
||||
// <owner name="Siegfried Pammer" email="siegfriedpammer@gmail.com" />
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
|
||||
namespace ICSharpCode.NRefactory.Parser.VBNet.Experimental |
||||
{ |
||||
partial class Parser |
||||
{ |
||||
Stack<Context> stack = new Stack<Context>(); |
||||
|
||||
void PopContext() |
||||
{ |
||||
if (stack.Count > 0) { |
||||
string indent = new string('\t', stack.Count - 1); |
||||
var item = stack.Pop(); |
||||
Console.WriteLine(indent + "exit " + item); |
||||
} else { |
||||
Console.WriteLine("empty stack"); |
||||
} |
||||
} |
||||
|
||||
void PushContext(Context context) |
||||
{ |
||||
string indent = new string('\t', stack.Count); |
||||
stack.Push(context); |
||||
Console.WriteLine(indent + "enter " + context); |
||||
} |
||||
|
||||
void SetContext(Context context) |
||||
{ |
||||
PopContext(); |
||||
PushContext(context); |
||||
} |
||||
} |
||||
|
||||
public enum Context { |
||||
Global, |
||||
Type, |
||||
Member, |
||||
IdentifierExpected |
||||
} |
||||
} |
||||
@ -0,0 +1,363 @@
@@ -0,0 +1,363 @@
|
||||
/*---------------------------------------------------------------------- |
||||
Compiler Generator Coco/R, |
||||
Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz |
||||
extended by M. Loeberbauer & A. Woess, Univ. of Linz |
||||
with improvements by Pat Terry, Rhodes University |
||||
|
||||
This program is free software; you can redistribute it and/or modify it |
||||
under the terms of the GNU General Public License as published by the |
||||
Free Software Foundation; either version 2, or (at your option) any |
||||
later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, but |
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
||||
for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License along |
||||
with this program; if not, write to the Free Software Foundation, Inc., |
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
||||
|
||||
As an exception, it is allowed to write an extension of Coco/R that is |
||||
used as a plugin in non-free software. |
||||
|
||||
If not otherwise stated, any source code generated by Coco/R (other than |
||||
Coco/R itself) does not fall under the GNU General Public License. |
||||
-----------------------------------------------------------------------*/ |
||||
-->begin |
||||
using System; |
||||
using System.IO; |
||||
using System.Collections.Generic; |
||||
|
||||
-->namespace |
||||
|
||||
public class Token { |
||||
public int kind; // token kind |
||||
public int pos; // token position in the source text (starting at 0) |
||||
public int col; // token column (starting at 1) |
||||
public int line; // token line (starting at 1) |
||||
public string val; // token value |
||||
public Token next; // ML 2005-03-11 Tokens are kept in linked list |
||||
} |
||||
|
||||
//----------------------------------------------------------------------------------- |
||||
// Buffer |
||||
//----------------------------------------------------------------------------------- |
||||
public class Buffer { |
||||
// This Buffer supports the following cases: |
||||
// 1) seekable stream (file) |
||||
// a) whole stream in buffer |
||||
// b) part of stream in buffer |
||||
// 2) non seekable stream (network, console) |
||||
|
||||
public const int EOF = char.MaxValue + 1; |
||||
const int MIN_BUFFER_LENGTH = 1024; // 1KB |
||||
const int MAX_BUFFER_LENGTH = MIN_BUFFER_LENGTH * 64; // 64KB |
||||
byte[] buf; // input buffer |
||||
int bufStart; // position of first byte in buffer relative to input stream |
||||
int bufLen; // length of buffer |
||||
int fileLen; // length of input stream (may change if the stream is no file) |
||||
int bufPos; // current position in buffer |
||||
Stream stream; // input stream (seekable) |
||||
bool isUserStream; // was the stream opened by the user? |
||||
|
||||
public Buffer (Stream s, bool isUserStream) { |
||||
stream = s; this.isUserStream = isUserStream; |
||||
|
||||
if (stream.CanSeek) { |
||||
fileLen = (int) stream.Length; |
||||
bufLen = Math.Min(fileLen, MAX_BUFFER_LENGTH); |
||||
bufStart = Int32.MaxValue; // nothing in the buffer so far |
||||
} else { |
||||
fileLen = bufLen = bufStart = 0; |
||||
} |
||||
|
||||
buf = new byte[(bufLen>0) ? bufLen : MIN_BUFFER_LENGTH]; |
||||
if (fileLen > 0) Pos = 0; // setup buffer to position 0 (start) |
||||
else bufPos = 0; // index 0 is already after the file, thus Pos = 0 is invalid |
||||
if (bufLen == fileLen && stream.CanSeek) Close(); |
||||
} |
||||
|
||||
protected Buffer(Buffer b) { // called in UTF8Buffer constructor |
||||
buf = b.buf; |
||||
bufStart = b.bufStart; |
||||
bufLen = b.bufLen; |
||||
fileLen = b.fileLen; |
||||
bufPos = b.bufPos; |
||||
stream = b.stream; |
||||
// keep destructor from closing the stream |
||||
b.stream = null; |
||||
isUserStream = b.isUserStream; |
||||
} |
||||
|
||||
~Buffer() { Close(); } |
||||
|
||||
protected void Close() { |
||||
if (!isUserStream && stream != null) { |
||||
stream.Close(); |
||||
stream = null; |
||||
} |
||||
} |
||||
|
||||
public virtual int Read () { |
||||
if (bufPos < bufLen) { |
||||
return buf[bufPos++]; |
||||
} else if (Pos < fileLen) { |
||||
Pos = Pos; // shift buffer start to Pos |
||||
return buf[bufPos++]; |
||||
} else if (stream != null && !stream.CanSeek && ReadNextStreamChunk() > 0) { |
||||
return buf[bufPos++]; |
||||
} else { |
||||
return EOF; |
||||
} |
||||
} |
||||
|
||||
public int Peek () { |
||||
int curPos = Pos; |
||||
int ch = Read(); |
||||
Pos = curPos; |
||||
return ch; |
||||
} |
||||
|
||||
public string GetString (int beg, int end) { |
||||
int len = 0; |
||||
char[] buf = new char[end - beg]; |
||||
int oldPos = Pos; |
||||
Pos = beg; |
||||
while (Pos < end) buf[len++] = (char) Read(); |
||||
Pos = oldPos; |
||||
return new String(buf, 0, len); |
||||
} |
||||
|
||||
public int Pos { |
||||
get { return bufPos + bufStart; } |
||||
set { |
||||
if (value >= fileLen && stream != null && !stream.CanSeek) { |
||||
// Wanted position is after buffer and the stream |
||||
// is not seek-able e.g. network or console, |
||||
// thus we have to read the stream manually till |
||||
// the wanted position is in sight. |
||||
while (value >= fileLen && ReadNextStreamChunk() > 0); |
||||
} |
||||
|
||||
if (value < 0 || value > fileLen) { |
||||
throw new FatalError("buffer out of bounds access, position: " + value); |
||||
} |
||||
|
||||
if (value >= bufStart && value < bufStart + bufLen) { // already in buffer |
||||
bufPos = value - bufStart; |
||||
} else if (stream != null) { // must be swapped in |
||||
stream.Seek(value, SeekOrigin.Begin); |
||||
bufLen = stream.Read(buf, 0, buf.Length); |
||||
bufStart = value; bufPos = 0; |
||||
} else { |
||||
// set the position to the end of the file, Pos will return fileLen. |
||||
bufPos = fileLen - bufStart; |
||||
} |
||||
} |
||||
} |
||||
|
||||
// Read the next chunk of bytes from the stream, increases the buffer |
||||
// if needed and updates the fields fileLen and bufLen. |
||||
// Returns the number of bytes read. |
||||
private int ReadNextStreamChunk() { |
||||
int free = buf.Length - bufLen; |
||||
if (free == 0) { |
||||
// in the case of a growing input stream |
||||
// we can neither seek in the stream, nor can we |
||||
// foresee the maximum length, thus we must adapt |
||||
// the buffer size on demand. |
||||
byte[] newBuf = new byte[bufLen * 2]; |
||||
Array.Copy(buf, newBuf, bufLen); |
||||
buf = newBuf; |
||||
free = bufLen; |
||||
} |
||||
int read = stream.Read(buf, bufLen, free); |
||||
if (read > 0) { |
||||
fileLen = bufLen = (bufLen + read); |
||||
return read; |
||||
} |
||||
// end of stream reached |
||||
return 0; |
||||
} |
||||
} |
||||
|
||||
//----------------------------------------------------------------------------------- |
||||
// UTF8Buffer |
||||
//----------------------------------------------------------------------------------- |
||||
public class UTF8Buffer: Buffer { |
||||
public UTF8Buffer(Buffer b): base(b) {} |
||||
|
||||
public override int Read() { |
||||
int ch; |
||||
do { |
||||
ch = base.Read(); |
||||
// until we find a utf8 start (0xxxxxxx or 11xxxxxx) |
||||
} while ((ch >= 128) && ((ch & 0xC0) != 0xC0) && (ch != EOF)); |
||||
if (ch < 128 || ch == EOF) { |
||||
// nothing to do, first 127 chars are the same in ascii and utf8 |
||||
// 0xxxxxxx or end of file character |
||||
} else if ((ch & 0xF0) == 0xF0) { |
||||
// 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
||||
int c1 = ch & 0x07; ch = base.Read(); |
||||
int c2 = ch & 0x3F; ch = base.Read(); |
||||
int c3 = ch & 0x3F; ch = base.Read(); |
||||
int c4 = ch & 0x3F; |
||||
ch = (((((c1 << 6) | c2) << 6) | c3) << 6) | c4; |
||||
} else if ((ch & 0xE0) == 0xE0) { |
||||
// 1110xxxx 10xxxxxx 10xxxxxx |
||||
int c1 = ch & 0x0F; ch = base.Read(); |
||||
int c2 = ch & 0x3F; ch = base.Read(); |
||||
int c3 = ch & 0x3F; |
||||
ch = (((c1 << 6) | c2) << 6) | c3; |
||||
} else if ((ch & 0xC0) == 0xC0) { |
||||
// 110xxxxx 10xxxxxx |
||||
int c1 = ch & 0x1F; ch = base.Read(); |
||||
int c2 = ch & 0x3F; |
||||
ch = (c1 << 6) | c2; |
||||
} |
||||
return ch; |
||||
} |
||||
} |
||||
|
||||
//----------------------------------------------------------------------------------- |
||||
// Scanner |
||||
//----------------------------------------------------------------------------------- |
||||
public class Scanner { |
||||
const char EOL = '\n'; |
||||
const int eofSym = 0; /* pdt */ |
||||
-->declarations |
||||
|
||||
public Buffer buffer; // scanner buffer |
||||
|
||||
Token t; // current token |
||||
int ch; // current input character |
||||
int pos; // byte position of current character |
||||
int col; // column number of current character |
||||
int line; // line number of current character |
||||
int oldEols; // EOLs that appeared in a comment; |
||||
static readonly Dictionary<int, int> start; // maps first token character to start state |
||||
|
||||
Token tokens; // list of tokens already peeked (first token is a dummy) |
||||
Token pt; // current peek token |
||||
|
||||
char[] tval = new char[128]; // text of current token |
||||
int tlen; // length of current token |
||||
|
||||
static Scanner() { |
||||
start = new Dictionary<int, int>(128); |
||||
-->initialization |
||||
} |
||||
|
||||
public Scanner (string fileName) { |
||||
try { |
||||
Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); |
||||
buffer = new Buffer(stream, false); |
||||
Init(); |
||||
} catch (IOException) { |
||||
throw new FatalError("Cannot open file " + fileName); |
||||
} |
||||
} |
||||
|
||||
public Scanner (Stream s) { |
||||
buffer = new Buffer(s, true); |
||||
Init(); |
||||
} |
||||
|
||||
void Init() { |
||||
pos = -1; line = 1; col = 0; |
||||
oldEols = 0; |
||||
NextCh(); |
||||
if (ch == 0xEF) { // check optional byte order mark for UTF-8 |
||||
NextCh(); int ch1 = ch; |
||||
NextCh(); int ch2 = ch; |
||||
if (ch1 != 0xBB || ch2 != 0xBF) { |
||||
throw new FatalError(String.Format("illegal byte order mark: EF {0,2:X} {1,2:X}", ch1, ch2)); |
||||
} |
||||
buffer = new UTF8Buffer(buffer); col = 0; |
||||
NextCh(); |
||||
} |
||||
pt = tokens = new Token(); // first token is a dummy |
||||
} |
||||
|
||||
void NextCh() { |
||||
if (oldEols > 0) { ch = EOL; oldEols--; } |
||||
else { |
||||
pos = buffer.Pos; |
||||
ch = buffer.Read(); col++; |
||||
// replace isolated '\r' by '\n' in order to make |
||||
// eol handling uniform across Windows, Unix and Mac |
||||
if (ch == '\r' && buffer.Peek() != '\n') ch = EOL; |
||||
if (ch == EOL) { line++; col = 0; } |
||||
} |
||||
-->casing1 |
||||
} |
||||
|
||||
void AddCh() { |
||||
if (tlen >= tval.Length) { |
||||
char[] newBuf = new char[2 * tval.Length]; |
||||
Array.Copy(tval, 0, newBuf, 0, tval.Length); |
||||
tval = newBuf; |
||||
} |
||||
if (ch != Buffer.EOF) { |
||||
-->casing2 |
||||
NextCh(); |
||||
} |
||||
} |
||||
|
||||
|
||||
-->comments |
||||
|
||||
void CheckLiteral() { |
||||
-->literals |
||||
} |
||||
|
||||
Token NextToken() { |
||||
while (ch == ' ' || |
||||
-->scan1 |
||||
) NextCh(); |
||||
-->scan2 |
||||
t = new Token(); |
||||
t.pos = pos; t.col = col; t.line = line; |
||||
int state; |
||||
if (!start.TryGetValue(ch, out state)) |
||||
state = 0; |
||||
tlen = 0; AddCh(); |
||||
|
||||
switch (state) { |
||||
case -1: { t.kind = eofSym; break; } // NextCh already done |
||||
case 0: { t.kind = noSym; break; } // NextCh already done |
||||
-->scan3 |
||||
} |
||||
t.val = new String(tval, 0, tlen); |
||||
return t; |
||||
} |
||||
|
||||
// get the next token (possibly a token already seen during peeking) |
||||
public Token Scan () { |
||||
if (tokens.next == null) { |
||||
return NextToken(); |
||||
} else { |
||||
pt = tokens = tokens.next; |
||||
return tokens; |
||||
} |
||||
} |
||||
|
||||
// peek for the next token, ignore pragmas |
||||
public Token Peek () { |
||||
do { |
||||
if (pt.next == null) { |
||||
pt.next = NextToken(); |
||||
} |
||||
pt = pt.next; |
||||
} while (pt.kind > maxT); // skip pragmas |
||||
|
||||
return pt; |
||||
} |
||||
|
||||
// make sure that peeking starts at the current scan position |
||||
public void ResetPeek () { pt = tokens; } |
||||
|
||||
} // end Scanner |
||||
|
||||
$$$ |
||||
@ -0,0 +1,50 @@
@@ -0,0 +1,50 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt"/>
|
||||
// <license see="prj:///doc/license.txt"/>
|
||||
// <owner name="Siegfried Pammer" email="siegfriedpammer@gmail.com" />
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
using ICSharpCode.NRefactory; |
||||
using ICSharpCode.NRefactory.Parser.VB; |
||||
using ICSharpCode.NRefactory.Parser.VBNet.Experimental; |
||||
|
||||
namespace VBParserExperiment |
||||
{ |
||||
class Program |
||||
{ |
||||
static string data = @"Option Explicit
|
||||
Option Strict On |
||||
|
||||
Imports System |
||||
Imports System.Linq |
||||
|
||||
Module Program |
||||
|
||||
End Module |
||||
|
||||
Namespace Test |
||||
Module Functions |
||||
Public Sub New() |
||||
|
||||
End Sub |
||||
|
||||
Public Sub Test(ByVal x As Integer) |
||||
|
||||
End Sub |
||||
End Module |
||||
End Namespace |
||||
";
|
||||
|
||||
public static void Main(string[] args) |
||||
{ |
||||
Parser p = new Parser(ParserFactory.CreateLexer(SupportedLanguage.VBNet, new StringReader(data))); |
||||
|
||||
p.Parse(); |
||||
|
||||
Console.ReadKey(true); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
#region Using directives
|
||||
|
||||
using System; |
||||
using System.Reflection; |
||||
using System.Runtime.InteropServices; |
||||
|
||||
#endregion
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("VBParserExperiment")] |
||||
[assembly: AssemblyDescription("")] |
||||
[assembly: AssemblyConfiguration("")] |
||||
[assembly: AssemblyCompany("")] |
||||
[assembly: AssemblyProduct("VBParserExperiment")] |
||||
[assembly: AssemblyCopyright("Copyright 2010")] |
||||
[assembly: AssemblyTrademark("")] |
||||
[assembly: AssemblyCulture("")] |
||||
|
||||
// This sets the default COM visibility of types in the assembly to invisible.
|
||||
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||
[assembly: ComVisible(false)] |
||||
|
||||
// The assembly version has following format :
|
||||
//
|
||||
// Major.Minor.Build.Revision
|
||||
//
|
||||
// You can specify all the values or you can use the default the Revision and
|
||||
// Build Numbers by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion("1.0.*")] |
||||
@ -0,0 +1,61 @@
@@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build"> |
||||
<PropertyGroup> |
||||
<ProjectGuid>{A21BF46E-27BC-4DCA-AB11-462BE5B0B028}</ProjectGuid> |
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform> |
||||
<OutputType>Exe</OutputType> |
||||
<RootNamespace>VBParserExperiment</RootNamespace> |
||||
<AssemblyName>VBParserExperiment</AssemblyName> |
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> |
||||
<AppDesignerFolder>Properties</AppDesignerFolder> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition=" '$(Platform)' == 'x86' "> |
||||
<PlatformTarget>x86</PlatformTarget> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> |
||||
<OutputPath>bin\Debug\</OutputPath> |
||||
<DebugSymbols>True</DebugSymbols> |
||||
<DebugType>Full</DebugType> |
||||
<Optimize>False</Optimize> |
||||
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow> |
||||
<DefineConstants>DEBUG;TRACE</DefineConstants> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' "> |
||||
<OutputPath>bin\Release\</OutputPath> |
||||
<DebugSymbols>False</DebugSymbols> |
||||
<DebugType>None</DebugType> |
||||
<Optimize>True</Optimize> |
||||
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> |
||||
<DefineConstants>TRACE</DefineConstants> |
||||
</PropertyGroup> |
||||
<ItemGroup> |
||||
<Reference Include="System" /> |
||||
<Reference Include="System.Core"> |
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework> |
||||
</Reference> |
||||
<Reference Include="System.Data" /> |
||||
<Reference Include="System.Data.DataSetExtensions"> |
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework> |
||||
</Reference> |
||||
<Reference Include="System.Xml" /> |
||||
<Reference Include="System.Xml.Linq"> |
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework> |
||||
</Reference> |
||||
</ItemGroup> |
||||
<ItemGroup> |
||||
<Compile Include="Program.cs" /> |
||||
<Compile Include="Properties\AssemblyInfo.cs" /> |
||||
</ItemGroup> |
||||
<ItemGroup> |
||||
<ProjectReference Include="..\..\..\..\..\NRefactory.csproj"> |
||||
<Project>{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}</Project> |
||||
<Name>NRefactory</Name> |
||||
</ProjectReference> |
||||
<ProjectReference Include="..\..\SharpDevelop\4.0\SharpDevelop\src\Libraries\NRefactory\Project\NRefactory.csproj"> |
||||
<Project>{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}</Project> |
||||
<Name>NRefactory</Name> |
||||
</ProjectReference> |
||||
</ItemGroup> |
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" /> |
||||
</Project> |
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue