2016-10-09 34 views
-3
Imports System.IO 
Public Class ReadAndInterpret 
'File dialog part 
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    OpenFileDialog1.ShowDialog() 
    TextBox1.Text = OpenFileDialog1.FileName 
End Sub 
'Set up the interpretator 
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
    Dim ClowsReader As New StreamReader(TextBox1.Text) 

    Do While ClowsReader.Peek() <> -1 
     Dim TextLine As String 
     TextLine = ClowsReader.ReadLine() & vbNewLine 
     'The function/variable interpreter part 
     If TextLine.Contains("var") Then 


      Dim CheckVarName As String = TextLine.Split(" ")(1) 
      Dim CheckVarVal As String = TextLine.Split(CheckVarName & "=")(1) 


     ElseIf TextLine.Contains("MsgBox") Then 


     Dim CheckLine As String = TextLine.Split(">")(1) 
      MsgBox(CheckLine) 

      If CheckLine.Contains(CheckVarName) Then 
       MsgBox(CheckVarName) 
      End If 


     End If 

    Loop 
End Sub 
End Class 

所以這是我在VB.NET中編寫的腳本語言解釋器的代碼。只有MSGBOX和可變功能(尚未完成)。在此代碼它給沒有被定義CheckVarName的錯誤,即使它是在代碼中定義局部變量未定義 - VB.Net

Dim CheckVarName As String = TextLine.Split(" ")(1) 

有誰知道爲什麼說CheckVarName沒有定義? (它提供了錯誤的這部分代碼):

 If CheckLine.Contains(CheckVarName) Then 
      MsgBox(CheckVarName) 
     End If 
+6

編程101 - 變量範圍https://msdn.microsoft.com/en-us/library/1t0wsc67.aspx我不想成爲否定的,但也許你應該完全理解一種語言在編寫語言解釋器之前是如何工作的 – Steve

+0

正確的縮進可以幫助您看到您已經在另一個塊(「If」的第一部分)中定義了「CheckVarName」。 –

+0

'儘管它已被定義'但是它被定義在if塊*內部。因此,*對於else塊*不可見。請**學習基礎知識**。 –

回答

0

只需要T取代你的類的頂部聲明的變量,就像這樣:

Public Class ReadAndInterpret 
    Dim CheckVarName As String = TextLine.Split(" ")(1) 
    ... 

只是希望它有助於好運自己!