Hi this is a small scanner to scan some source code, I made this after I wanted to try and write a small interpreter for my self.
At the moment it supports the scanning of String,Symbols and Numbers.

Anyway this is the beginning of it. This is just the scanner. Hope you may find it sufull commends suguestions welcome.

vbnet Code:
  1. Option Explicit On
  2. Imports System.Text
  3.  
  4. Public Class Form1
  5.  
  6.     Private Tokens As List(Of Token)
  7.     Private idx As Integer = 0
  8.  
  9.     Private Enum TokenTypes
  10.         StrText = 0
  11.         Symbols = 1
  12.         Digits = 2
  13.         EOC = 3
  14.     End Enum
  15.  
  16.     Private Structure Token
  17.         Dim Token As String
  18.         Dim Type As TokenTypes
  19.     End Structure
  20.  
  21.     Private Sub AddToken(ByVal Data As String, ByVal Type As TokenTypes)
  22.         Dim tok As Token
  23.         'Add token and type.
  24.         tok.Type = Type
  25.         tok.Token = Data
  26.         Tokens.Add(tok)
  27.     End Sub
  28.  
  29.     Private Sub InitScanner()
  30.         'Init defaults.
  31.         idx = 0
  32.         Tokens = New List(Of Token)
  33.     End Sub
  34.  
  35.     Private Sub Scan(ByVal Source As String)
  36.  
  37.         'While less than length loop.
  38.         While idx <= (Source.Length - 1)
  39.  
  40.             Dim ch As Char = Source(idx)
  41.  
  42.             'Check for end of code.
  43.             If (idx >= Source.Length - 1) Then
  44.                 AddToken("EOC", TokenTypes.EOC)
  45.             End If
  46.  
  47.             'Skip white space
  48.             If Char.IsWhiteSpace(ch) Then
  49.                 idx += 1
  50.                 ch = ""
  51.             ElseIf Char.IsLetter(ch) Then
  52.                 Dim sb As New StringBuilder()
  53.                 'Get letters
  54.  
  55.                 While Char.IsLetter(ch)
  56.                     ch = Source(idx)
  57.                     If Char.IsLetter(ch) Then
  58.                         sb.Append(ch)
  59.                     End If
  60.                     'Inc counter
  61.                     idx += 1
  62.                 End While
  63.  
  64.                 'Add token and type
  65.                 AddToken(sb.ToString(), TokenTypes.StrText)
  66.  
  67.             ElseIf Char.IsSymbol(ch) Then
  68.                 Dim sb As New StringBuilder()
  69.                 'Get symbols
  70.                 While Char.IsSymbol(ch)
  71.                     ch = Source(idx)
  72.                     If Char.IsSymbol(ch) Then
  73.                         sb.Append(ch)
  74.                     End If
  75.                     'INC counter
  76.                     idx += 1
  77.                 End While
  78.  
  79.                 'Add token and type
  80.                 AddToken(sb.ToString(), TokenTypes.Symbols)
  81.  
  82.             ElseIf Char.IsNumber(ch) Then
  83.                 Dim sb As New StringBuilder()
  84.                 'get digits
  85.                 While Char.IsNumber(ch)
  86.                     ch = Source(idx)
  87.                     If Char.IsNumber(ch) Then
  88.                         sb.Append(ch)
  89.                     End If
  90.                     'INC counter
  91.                     idx += 1
  92.                 End While
  93.  
  94.                 'Add token and type
  95.                 AddToken(sb.ToString(), TokenTypes.Digits)
  96.             Else
  97.                 Throw New ArgumentException("Bad Token Found.")
  98.             End If
  99.             'idx += 1
  100.         End While
  101.  
  102.     End Sub
  103.  
  104.     Private Sub cmdShow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdShow.Click
  105.         Dim tok As New Token
  106.         Dim s As String
  107.  
  108.         'Example code to scan
  109.         s = "Var X" & vbCrLf
  110.         s = s & "X = Hello World" & vbCrLf
  111.         s = s & "B = 123" & vbCrLf
  112.         s = s & "Print B" & vbCrLf
  113.  
  114.         'Init scanner defaults
  115.         InitScanner()
  116.         'Add source
  117.         Scan(s)
  118.  
  119.         For Each tok In Tokens
  120.             'Show token and type
  121.             MessageBox.Show("Token = " & tok.Token & " Type = " & tok.Type.ToString(),
  122.                             "Scanner Demo", MessageBoxButtons.OK, MessageBoxIcon.Information)
  123.         Next tok
  124.     End Sub
  125. End Class