www.pudn.com > yanshi.rar > frmOutput.frm


VERSION 5.00 
Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "MSFLXGRD.OCX" 
Begin VB.Form frmOutput  
   AutoRedraw      =   -1  'True 
   BackColor       =   &H00C0C0FF& 
   Caption         =   "语 义 分 析 结 果" 
   ClientHeight    =   5835 
   ClientLeft      =   60 
   ClientTop       =   285 
   ClientWidth     =   7395 
   BeginProperty Font  
      Name            =   "宋体" 
      Size            =   14.25 
      Charset         =   134 
      Weight          =   400 
      Underline       =   0   'False 
      Italic          =   0   'False 
      Strikethrough   =   0   'False 
   EndProperty 
   LinkTopic       =   "Form2" 
   ScaleHeight     =   8595 
   ScaleWidth      =   11880 
   StartUpPosition =   3  'Windows Default 
   WindowState     =   2  'Maximized 
   Begin VB.CheckBox Check1  
      Caption         =   "手动" 
      Height          =   285 
      Left            =   2640 
      TabIndex        =   14 
      Top             =   5880 
      Width           =   975 
   End 
   Begin VB.Timer Timer1  
      Interval        =   100 
      Left            =   3360 
      Top             =   240 
   End 
   Begin VB.HScrollBar HScroll1  
      Height          =   375 
      Left            =   2880 
      TabIndex        =   13 
      Top             =   5040 
      Width           =   3375 
   End 
   Begin VB.ListBox output  
      Height          =   1200 
      ItemData        =   "frmOutput.frx":0000 
      Left            =   8520 
      List            =   "frmOutput.frx":0002 
      TabIndex        =   11 
      Top             =   6360 
      Width           =   2895 
   End 
   Begin MSFlexGridLib.MSFlexGrid data  
      Height          =   1695 
      Left            =   8520 
      TabIndex        =   10 
      Top             =   120 
      Width           =   2895 
      _ExtentX        =   5106 
      _ExtentY        =   2990 
      _Version        =   393216 
      BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}  
         Name            =   "宋体" 
         Size            =   14.25 
         Charset         =   134 
         Weight          =   400 
         Underline       =   0   'False 
         Italic          =   0   'False 
         Strikethrough   =   0   'False 
      EndProperty 
   End 
   Begin VB.ListBox stack  
      Height          =   4050 
      ItemData        =   "frmOutput.frx":0004 
      Left            =   8520 
      List            =   "frmOutput.frx":0006 
      TabIndex        =   8 
      Top             =   1920 
      Width           =   2895 
   End 
   Begin VB.CommandButton run  
      Caption         =   "运行" 
      BeginProperty Font  
         Name            =   "隶书" 
         Size            =   21.75 
         Charset         =   134 
         Weight          =   400 
         Underline       =   0   'False 
         Italic          =   0   'False 
         Strikethrough   =   0   'False 
      EndProperty 
      Height          =   615 
      Left            =   4080 
      TabIndex        =   6 
      Top             =   5760 
      Width           =   2175 
   End 
   Begin VB.ListBox lstCode  
      BackColor       =   &H00FF8080& 
      BeginProperty Font  
         Name            =   "MS Sans Serif" 
         Size            =   9.75 
         Charset         =   0 
         Weight          =   700 
         Underline       =   0   'False 
         Italic          =   0   'False 
         Strikethrough   =   0   'False 
      EndProperty 
      Height          =   5100 
      ItemData        =   "frmOutput.frx":0008 
      Left            =   120 
      List            =   "frmOutput.frx":0060 
      TabIndex        =   4 
      Top             =   600 
      Width           =   2295 
   End 
   Begin MSFlexGridLib.MSFlexGrid varTable  
      Height          =   3495 
      Left            =   2520 
      TabIndex        =   1 
      Top             =   1320 
      Width           =   4695 
      _ExtentX        =   8281 
      _ExtentY        =   6165 
      _Version        =   393216 
      Rows            =   1 
      Cols            =   4 
      BackColor       =   33023 
      ForeColorSel    =   16777215 
      BackColorBkg    =   8454016 
      BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}  
         Name            =   "MS Sans Serif" 
         Size            =   9.75 
         Charset         =   0 
         Weight          =   700 
         Underline       =   0   'False 
         Italic          =   0   'False 
         Strikethrough   =   0   'False 
      EndProperty 
   End 
   Begin VB.CommandButton Command1  
      Caption         =   "返回语义分析" 
      BeginProperty Font  
         Name            =   "宋体" 
         Size            =   10.5 
         Charset         =   134 
         Weight          =   400 
         Underline       =   0   'False 
         Italic          =   0   'False 
         Strikethrough   =   0   'False 
      EndProperty 
      Height          =   495 
      Left            =   6360 
      TabIndex        =   0 
      Top             =   4920 
      Width           =   1455 
   End 
   Begin VB.Label Label6  
      AutoSize        =   -1  'True 
      BackColor       =   &H00FF0000& 
      BackStyle       =   0  'Transparent 
      Caption         =   "输出:" 
      BeginProperty Font  
         Name            =   "隶书" 
         Size            =   15.75 
         Charset         =   134 
         Weight          =   400 
         Underline       =   0   'False 
         Italic          =   0   'False 
         Strikethrough   =   0   'False 
      EndProperty 
      ForeColor       =   &H00FF0000& 
      Height          =   315 
      Left            =   7440 
      TabIndex        =   12 
      Top             =   6360 
      Width           =   990 
   End 
   Begin VB.Label Label5  
      AutoSize        =   -1  'True 
      BackStyle       =   0  'Transparent 
      Caption         =   "操作栈:" 
      BeginProperty Font  
         Name            =   "隶书" 
         Size            =   15.75 
         Charset         =   134 
         Weight          =   400 
         Underline       =   0   'False 
         Italic          =   0   'False 
         Strikethrough   =   0   'False 
      EndProperty 
      ForeColor       =   &H00FF0000& 
      Height          =   315 
      Left            =   7320 
      TabIndex        =   9 
      Top             =   1920 
      Width           =   1320 
   End 
   Begin VB.Label Label2  
      Alignment       =   1  'Right Justify 
      AutoSize        =   -1  'True 
      BackStyle       =   0  'Transparent 
      Caption         =   "内存:" 
      BeginProperty Font  
         Name            =   "隶书" 
         Size            =   15.75 
         Charset         =   134 
         Weight          =   400 
         Underline       =   0   'False 
         Italic          =   0   'False 
         Strikethrough   =   0   'False 
      EndProperty 
      ForeColor       =   &H00FF0000& 
      Height          =   315 
      Left            =   7305 
      TabIndex        =   7 
      Top             =   120 
      Width           =   990 
   End 
   Begin VB.Label Label1  
      AutoSize        =   -1  'True 
      BackColor       =   &H00FFFF80& 
      BeginProperty Font  
         Name            =   "隶书" 
         Size            =   18 
         Charset         =   134 
         Weight          =   700 
         Underline       =   0   'False 
         Italic          =   0   'False 
         Strikethrough   =   0   'False 
      EndProperty 
      ForeColor       =   &H000000C0& 
      Height          =   360 
      Left            =   2880 
      TabIndex        =   5 
      Top             =   240 
      Width           =   210 
   End 
   Begin VB.Label Label4  
      AutoSize        =   -1  'True 
      BackColor       =   &H00C0C0FF& 
      Caption         =   "代 码 生 成" 
      BeginProperty Font  
         Name            =   "隶书" 
         Size            =   15.75 
         Charset         =   134 
         Weight          =   700 
         Underline       =   0   'False 
         Italic          =   0   'False 
         Strikethrough   =   0   'False 
      EndProperty 
      ForeColor       =   &H00C00000& 
      Height          =   315 
      Left            =   240 
      TabIndex        =   3 
      Top             =   240 
      Width           =   1935 
   End 
   Begin VB.Label Label3  
      AutoSize        =   -1  'True 
      BackColor       =   &H00C0C0FF& 
      Caption         =   "符  号  表" 
      BeginProperty Font  
         Name            =   "隶书" 
         Size            =   15.75 
         Charset         =   134 
         Weight          =   700 
         Underline       =   0   'False 
         Italic          =   0   'False 
         Strikethrough   =   0   'False 
      EndProperty 
      ForeColor       =   &H00FF0000& 
      Height          =   315 
      Left            =   3960 
      TabIndex        =   2 
      Top             =   960 
      Width           =   1770 
   End 
End 
Attribute VB_Name = "frmOutput" 
Attribute VB_GlobalNameSpace = False 
Attribute VB_Creatable = False 
Attribute VB_PredeclaredId = True 
Attribute VB_Exposed = False 
Option Explicit 
 
Private Sub Command1_Click() 
Me.Hide 
End Sub 
 
Private Sub Form_Load() 
With varTable 
   .Row = 0 
   .Col = 0 
   .Text = "序号" 
   .Col = 1 
   .Text = "变量名" 
   .Col = 2 
   .Text = "类型" 
   .Col = 3 
   .Text = "地址" 
End With 
 
End Sub 
 
Private Sub HScroll1_Change() 
s = HScroll1.Value 
End Sub 
 
Private Sub run_Click() 
    Dim Label(100) As Integer 
    Dim i As Integer, inText As String 
    Dim command(1) As String 
    output.Clear 
    stack.Clear 
    For i = 0 To lstCode.ListCount - 1 
        lstCode.ListIndex = i 
        If Right$(lstCode.List(i), 1) = ":" Then 
            Label(Val(Mid$(lstCode.List(i), 6, Len(lstCode.List(i)) - 6))) = i '用label数组记住每个标号的地址 
        End If 
    Next i 
    For i = 0 To lstCode.ListCount - 1 
        lstCode.ListIndex = i 
        Sleep 
        If Check1.Value = 1 Then MsgBox "继续" 
        command(0) = Trim$(Left$(lstCode.List(i), 15)) 
        command(1) = Mid$(lstCode.List(i), 16) 
        Select Case command(0) 
        Case "LOAD" 
            data.Row = Val(command(1)) 
            data.Col = 1 
            stack.AddItem data.Text 
            stack.ListIndex = stack.ListCount - 1 
        Case "LOADI" 'LOADI a将常量a压入操作数栈 
            stack.AddItem command(1) 
            stack.ListIndex = stack.ListCount - 1 
        Case "STO" 'STO D 将操作数栈栈顶单元内容存入D,且栈顶单元内容保持不变。 
            data.Row = Val(command(1)) 
            data.Col = 1 
            data.Text = stack.Text 
        Case "STI" 'STI D 将操作数栈栈顶单元内容存入D,且栈顶单元内容出栈。 
            data.Row = Val(command(1)) 
            data.Col = 1 
            data.Text = stack.Text 
            stack.RemoveItem stack.ListCount - 1 
            stack.ListIndex = stack.ListCount - 1 
        Case "ADD" 'ADD将次栈顶单元与栈顶单元内容出栈并相加,和置于栈顶。 
            stack.List(stack.ListCount - 2) = Val(stack.List(stack.ListCount - 2)) + Val(stack.List(stack.ListCount - 1)) 
            stack.RemoveItem stack.ListCount - 1 
            stack.ListIndex = stack.ListCount - 1 
        Case "SUB" 'SUB 将次栈顶单元减去栈顶单元内容并出栈,差置于栈顶。 
            stack.List(stack.ListCount - 2) = Val(stack.List(stack.ListCount - 2)) - Val(stack.List(stack.ListCount - 1)) 
            stack.RemoveItem stack.ListCount - 1 
            stack.ListIndex = stack.ListCount - 1 
        Case "MULT" 'MULT   将次栈顶单元与栈顶单元内容出栈并相乘,积置于栈顶。 
            stack.List(stack.ListCount - 2) = Val(stack.List(stack.ListCount - 2)) * Val(stack.List(stack.ListCount - 1)) 
            stack.RemoveItem stack.ListCount - 1 
            stack.ListIndex = stack.ListCount - 1 
        Case "DIV" 'DIV    将次栈顶单元与栈顶单元内容出栈并相除,商置于栈顶。 
            stack.List(stack.ListCount - 2) = Val(stack.List(stack.ListCount - 2)) \ Val(stack.List(stack.ListCount - 1)) 
            stack.RemoveItem stack.ListCount - 1 
            stack.ListIndex = stack.ListCount - 1 
        Case "BR" 'BR    lab  无条件转移到lab 
            i = Label(Val(Mid$(command(1), 6, 10))) 
            stack.ListIndex = stack.ListCount - 1 
        Case "BRF" 'BRF  lab  检查栈顶单元逻辑值,若为假(0)则转移到lab 
            If stack.Text = "False" Then i = Label(Val(Mid$(command(1), 6, 10))) 
            stack.RemoveItem stack.ListCount - 1 
            stack.ListIndex = stack.ListCount - 1 
        Case "EQ" 'EQ  将栈顶两单元做等于比较,并将结果真或假(1或0)置于栈顶 
            stack.List(stack.ListCount - 2) = Val(stack.List(stack.ListCount - 2)) = Val(stack.List(stack.ListCount - 1)) 
            stack.RemoveItem stack.ListCount - 1 
            stack.ListIndex = stack.ListCount - 1 
        Case "NOTEQ" 'NOTEQ 将栈顶两单元做不等于比较,并将结果真或假(1或0)置于栈顶 
            stack.List(stack.ListCount - 2) = Val(stack.List(stack.ListCount - 2)) <> Val(stack.List(stack.ListCount - 1)) 
            stack.RemoveItem stack.ListCount - 1 
            stack.ListIndex = stack.ListCount - 1 
        Case "GT" 'GT    次栈顶大于栈顶操作数,则栈顶置1,否则置0 
            stack.List(stack.ListCount - 2) = Val(stack.List(stack.ListCount - 2)) > Val(stack.List(stack.ListCount - 1)) 
            stack.RemoveItem stack.ListCount - 1 
            stack.ListIndex = stack.ListCount - 1 
        Case "LES" 'LES  次栈顶小于栈顶操作数,则栈顶置1,否则置0 
            stack.List(stack.ListCount - 2) = Val(stack.List(stack.ListCount - 2)) < Val(stack.List(stack.ListCount - 1)) 
            stack.RemoveItem stack.ListCount - 1 
            stack.ListIndex = stack.ListCount - 1 
        Case "GE" 'GE  次栈顶大于等于栈顶操作数,则栈顶置1,否则置0 
            stack.List(stack.ListCount - 2) = Val(stack.List(stack.ListCount - 2)) >= Val(stack.List(stack.ListCount - 1)) 
            stack.RemoveItem stack.ListCount - 1 
            stack.ListIndex = stack.ListCount - 1 
        Case "LE" 'LE  次栈顶小于等于栈顶操作数,则栈顶置1,否则置0 
            stack.List(stack.ListCount - 2) = Val(stack.List(stack.ListCount - 2)) <= Val(stack.List(stack.ListCount - 1)) 
            stack.RemoveItem stack.ListCount - 1 
            stack.ListIndex = stack.ListCount - 1 
        Case "AND" 'AND 将栈顶两单元做逻辑与运算,并将结果真或假(1或0)置于栈顶 
            stack.List(stack.ListCount - 2) = Val(stack.List(stack.ListCount - 2)) And Val(stack.List(stack.ListCount - 1)) 
            stack.RemoveItem stack.ListCount - 1 
            stack.ListIndex = stack.ListCount - 1 
        Case "OR" 'OR  将栈顶两单元做逻辑或运算,并将结果真或假(1或0)置于栈顶 
            stack.List(stack.ListCount - 2) = Val(stack.List(stack.ListCount - 2)) Or Val(stack.List(stack.ListCount - 1)) 
            stack.RemoveItem stack.ListCount - 1 
            stack.ListIndex = stack.ListCount - 1 
        Case "NOT" 'NOT  将栈顶的逻辑值取反 
            stack.List(stack.ListCount - 1) = Not stack.List(stack.ListCount - 1) 
        Case "IN" 'IN 从标准输入设备(键盘)读入一个整型数据,并入栈。 
            inText = InputBox("请输入整数数据:") 
            stack.AddItem inText 
            stack.ListIndex = stack.ListCount - 1 
        Case "OUT" 'OUT 将栈顶单元内容出栈,并输出到标准输出设备上(显示器)。 
            output.AddItem stack.Text 
            stack.RemoveItem stack.ListCount - 1 
            stack.ListIndex = stack.ListCount - 1 
        Case "STOP" 'STOP 停止执行 
            MsgBox "运行结束" 
            Exit Sub 
        End Select 
    Next i 
End Sub 
 
 
 
Private Sub Timer1_Timer() 
s = Val(HScroll1.Value) * 1000 
End Sub