# this list is used for autogeneration of:
# - Keywords.cs
# - Tokens.cs
# - ATGTokensSection.txt - the TOKENS section of the ATG file

# use BuildKeywords to generate the different lists.

$Namespace=ICSharpCode.NRefactory.VB.Parser
$UpperCaseKeywords=True

# TERMINAL_CLASSES
EOF
EOL
Identifier
LiteralString
LiteralCharacter
LiteralInteger
LiteralDouble
LiteralSingle
LiteralDecimal
LiteralDate

# XML_TERMINALS
XmlOpenTag
XmlCloseTag
XmlStartInlineVB
XmlEndInlineVB
XmlCloseTagEmptyElement
XmlOpenEndTag
XmlContent
XmlComment
XmlCData
XmlProcessingInstruction

# SPECIAL_CHARACTERS
Assign = "="
Colon =":"
Comma = ","
ConcatString = "&"
Div ="/"
DivInteger = "\\"
Dot = "."
TripleDot = "..."
DotAt = ".@"
# Exclamation mark = Dictionary access operator (not always a token, sometimes it's a type character)
ExclamationMark = "!"
Minus = "-"
Plus = "+"
Power = "^"
QuestionMark = "?"
Times = "*"

OpenCurlyBrace = "{"
CloseCurlyBrace = "}"
	
OpenParenthesis = "("
CloseParenthesis = ")"
	
GreaterThan = ">"
LessThan = "<"
	
NotEqual = "<>"
GreaterEqual = ">="
LessEqual = "<="
	
ShiftLeft = "<<"
ShiftRight = ">>"
	
PlusAssign = "+="
PowerAssign = "^="
MinusAssign = "-="
TimesAssign = "*="
DivAssign = "/="
DivIntegerAssign = "\\="
ShiftLeftAssign = "<<="
ShiftRightAssign = ">>="
ConcatStringAssign = "&="
ColonAssign = ":="

# keywords according to the spec:
# Keywordlist
"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"
# Note: IsTrue and IsFalse are 'NOT' keywords they're only valid in Operator declarations (like get/set/value are no C# 'keywords')
"Join"
"Key"
"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"
"Out"
"Overloads"
"Overridable"
"Overrides"
"ParamArray"
"Partial"
"Preserve"
"Private"
"Property"
"Protected"
"Public"
"RaiseEvent"
"ReadOnly"
"ReDim"
# has to be in the keyword list for the output formatter
"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"

#XML specific keywords
"GetXmlNamespace"

#Sets
Null("Nothing")
BlockSucc("Case", "Catch", "Else", "ElseIf", "End", "Finally", "Loop", "Next")
GlobalLevel("Namespace", "Module", "Class", "Structure", "Imports", "Option")
TypeLevel("Sub", "Function", "Property")

# List of keywords that are valid identifiers, must be the same as the "Identifier" production in VBNET.ATG
IdentifierTokens("Text", "Binary", "Compare", "Assembly", "Ansi", "Auto", "Preserve", "Unicode", "Until", "Off", "Out", "Key", "Explicit", "Infer", "From", "Join", "Equals", "Distinct", "Where", "Take", "Skip", "Order", "By", "Ascending", "Descending", "Group", "Into", "Aggregate")
ExpressionStart("Me", "MyBase", "MyClass", @BooleanExpressions, @OperatorsAtStart, "New", @Null, "AddressOf", "GetType", "TypeOf", "GetXmlNamespace", "Global", @TypeKW, @LambdaStart, @CastExpressions)
StatementStart(@Null, @ExpressionStart, "Dim", "Const", "Static", "For", "While", "Do", "Select")
SimpleTypeName(@TypeKW, @IdentifierTokens)
CastExpressions("DirectCast", "TryCast", "CType", "CBool", "CByte", "CChar", "CDate", "CDec", "CDbl", "CInt", "CLng", "CObj", "CSByte", "CShort", "CSng", "CStr", "CUInt", "CULng", "CUShort")
BooleanExpressions("True", "False")
LambdaStart("Sub", "Function")
OperatorsAtStart("Not", "From", "Aggregate")
TypeKW("Boolean", "Date", "Char", "String", "Decimal", "Byte", "Short", "Integer", "Long", "Single", "Double", "UInteger", "ULong", "UShort", "SByte")