Hallo iedereen!
ik heb een redelijk specifieke vraag over de gold parser:
info:
http://www.goldparser.org/index.htm
download (regsvr32 to register):
http://www.goldparse...1/vb6/index.htm
op de website blijkt het dat je deze dll kan gebruiken als een aciveX object, dus volgens mij ook in vbscript.
help voor the activeX dll:
http://www.goldparse...6/doc/index.htm
tot nu toe ben ik er alleen maar in geslaagd om een "skeleton programma" te maken en vanaf daar zit ik nog altijd vast...
dit is een stuk code uit "Allen-Benton-Simple-Interpreter-rev1.3":
... With TheReduction
Select Case .ParentRule.TableIndex
Case Rule_Statements ' <Statements> ::= <Statement> <Statements>
Set NewSimpleObject = New SimpleStmList
Call NewSimpleObject.Init(.Tokens(0).Data, .Tokens(1).Data)
Case Rule_Statements2 ' <Statements> ::= <Statement>
Set NewSimpleObject = New SimpleStmList
Call NewSimpleObject.Init(.Tokens(0).Data)
...
de code leest een paar tokens en stuurt die dan naar een of ander object dat word aangemaakt en wat er dan mee gebeurd is voor mij een raadsel..
ik heb moeite met het begrijpen hoe de code juist werkt en in elkaar zit,
hoe weet de code van Allen-Benton-Simple-Interpreter hoe het dit moet uitvoeren:
assign test = 1 + 2 * 3
ik zoek iemand die me kan helpen de code te begrijpen.
hier is mijn vbscript code die ik al heb en vanaf hier heb ik geen idee hoe verder te gaan:
Const Symboltypecommentend = 5
Const Symboltypecommentline = 6
Const Symboltypecommentstart = 4
Const Symboltypeend = 3
Const Symboltypeerror = 7
Const Symboltypenonterminal = 0
Const Symboltypeterminal = 1
Const Symboltypewhitespace = 2
Const Gpmsgaccept = 3
Const Gpmsgcommentblockread = 9
Const Gpmsgcommenterror = 7
Const Gpmsgcommentlineread = 10
Const Gpmsginternalerror = 8
Const Gpmsglexicalerror = 5
Const Gpmsgnotloadederror = 4
Const Gpmsgreduction = 2
Const Gpmsgsyntaxerror = 6
Const Gpmsgtokenread = 1
Const Rule_Statements1 = 0 ' <statements> ::= <statement> <statements>
Const Rule_Statements2 = 1 ' <statements> ::= <statement>
Const Rule_Statement_Nameisexpression = 2 ' <statement> ::= name '=' <expression>
Const Rule_Statement_Msgexpression = 3 ' <statement> ::= msg <expression>
Const Rule_Statement_Ifthenend = 4 ' <statement> ::= if <expression> then <statements> end
Const Rule_Statement_Ifthenelseend = 5 ' <statement> ::= if <expression> then <statements> else <statements> end
Const Rule_Expression_Biggerthen = 6 ' <expression> ::= <expression> '>' <add exp>
Const Rule_Expression_Smallerthen = 7 ' <expression> ::= <expression> '<' <add exp>
Const Rule_Expression_Biggerequalthen1 = 8 ' <expression> ::= <expression> '<=' <add exp>
Const Rule_Expression_Biggerequalthen2 = 9 ' <expression> ::= <expression> '>=' <add exp>
Const Rule_Expression_Smallerequalthen1 = 10' <expression> ::= <expression> '=>' <add exp>
Const Rule_Expression_Smallerequalthen2 = 11' <expression> ::= <expression> '=<' <add exp>
Const Rule_Expression_Equalthen = 12 ' <expression> ::= <expression> '=' <add exp>
Const Rule_Expression_Notequalthen = 13 ' <expression> ::= <expression> '!' <add exp>
Const Rule_Expression = 14 ' <expression> ::= <add exp>
Const Rule_Add_Plus = 15 ' <add exp> ::= <add exp> '+' <mult exp>
Const Rule_Add_Minus = 16 ' <add exp> ::= <add exp> '-' <mult exp>
Const Rule_Add_Amp = 17 ' <add exp> ::= <add exp> '&' <mult exp>
Const Rule_Add_Expression = 18 ' <add exp> ::= <mult exp>
Const Rule_Mult_Mult = 19 ' <mult exp> ::= <mult exp> '*' <value>
Const Rule_Mult_Div = 20 ' <mult exp> ::= <mult exp> '/' <value>
Const Rule_Mult_Value = 21 ' <mult exp> ::= <value>
Const Rule_Value_Name = 22 ' <value> ::= name
Const Rule_Value_String = 23 ' <value> ::= string
Const Rule_Value_Number = 24 ' <value> ::= number
Const Rule_Value_Groupedexpression = 25 ' <value> ::= '(' <expression> ')'
Set Parser = CreateObject("goldparserengine.goldparser")
With Parser
.Loadcompiledgrammar "F:\Tom_Schrauwen\Projects\bezig nu!\verryBasic\test_script.cgt"
.Trimreductions = True
.Openfile "F:\Tom_Schrauwen\Projects\bezig nu!\verryBasic\program.txt"
End With
Done = False
Do
Response = Parser.Parse()
Select Case Response
Case Gpmsglexicalerror
Call Msg("Illegal or unrecognized token!", True)
Case Gpmsgsyntaxerror
Call Msg("Token not expected!", True)
Case Gpmsgcommenterror
Call Msg("Comment was not terminated!", True)
Case Gpmsginternalerror
Call Msg("Something horrid happened inside the parser!", True)
Case Gpmsgnotloadederror
Call Msg("Compiled grammar not loaded!", True)
Case Gpmsgtokenread
'Call Msg("[CURRENT TOKEN]=[" & Parser.Currenttoken.Name & "]", false)
Case Gpmsgcommentblockread
Call Msg("This script can't contain block comments!", True)
Case Gpmsgcommentlineread
'comment line read..
Case Gpmsgreduction
Select Case Parser.Currentreduction.Parentrule.Tableindex
Case Rule_Statements1
msgbox "Rule_Statements1"
Case Rule_Statements2
msgbox "Rule_Statements2"
Case Rule_Statement_Nameisexpression
msgbox "Rule_Statement_Nameisexpression"
Case Rule_Statement_Msgexpression
msgbox "Rule_Statement_Msgexpression"
Case Rule_Statement_Ifthenend
msgbox "Rule_Statement_Ifthenend"
Case Rule_Statement_Ifthenelseend
msgbox "Rule_Statement_Ifthenelseend"
Case Rule_Expression_Biggerthen, Rule_Expression_Smallerthen, Rule_Expression_Biggerequalthen1, Rule_Expression_Biggerequalthen2, Rule_Expression_Smallerequalthen1, Rule_Expression_Smallerequalthen2, Rule_Expression_Equalthen, Rule_Expression_Notequalthen
msgbox "Rule_Expression ..."
Case Rule_Add_Plus
msgbox "Rule_Add_Plus"
Case Rule_Add_Minus
msgbox "Rule_Add_Minus"
Case Rule_Add_Amp
msgbox "Rule_Add_Amp"
Case Rule_Mult_Mult
msgbox "Rule_Mult_Mult"
Case Rule_Mult_Div
msgbox "Rule_Mult_Div"
Case Rule_Mult_Value
msgbox "Rule_Mult_Value"
Case Rule_Value_Name
msgbox "Rule_Value_Name"
Case Rule_Value_String
msgbox "Rule_Value_String"
Case Rule_Value_Number
msgbox "Rule_Value_Number"
Case Rule_Value_Groupedexpression
msgbox "Rule_Value_Groupedexpression"
'this 2 case options are ignored because of "TrimReductions = True"
'Case Rule_Expression
'Case Rule_Add_Expression
End Select
Case Gpmsgaccept
Msgbox "Done!",32
Done = True
End Select
Loop Until Done = True
Sub Msg(Input, Bool)
MsgBox Input
If Bool Then WScript.Quit
End Sub
ik heb een redelijk specifieke vraag over de gold parser:
info:
http://www.goldparser.org/index.htm
download (regsvr32 to register):
http://www.goldparse...1/vb6/index.htm
op de website blijkt het dat je deze dll kan gebruiken als een aciveX object, dus volgens mij ook in vbscript.
help voor the activeX dll:
http://www.goldparse...6/doc/index.htm
tot nu toe ben ik er alleen maar in geslaagd om een "skeleton programma" te maken en vanaf daar zit ik nog altijd vast...
dit is een stuk code uit "Allen-Benton-Simple-Interpreter-rev1.3":
... With TheReduction
Select Case .ParentRule.TableIndex
Case Rule_Statements ' <Statements> ::= <Statement> <Statements>
Set NewSimpleObject = New SimpleStmList
Call NewSimpleObject.Init(.Tokens(0).Data, .Tokens(1).Data)
Case Rule_Statements2 ' <Statements> ::= <Statement>
Set NewSimpleObject = New SimpleStmList
Call NewSimpleObject.Init(.Tokens(0).Data)
...
de code leest een paar tokens en stuurt die dan naar een of ander object dat word aangemaakt en wat er dan mee gebeurd is voor mij een raadsel..
ik heb moeite met het begrijpen hoe de code juist werkt en in elkaar zit,
hoe weet de code van Allen-Benton-Simple-Interpreter hoe het dit moet uitvoeren:
assign test = 1 + 2 * 3
ik zoek iemand die me kan helpen de code te begrijpen.
hier is mijn vbscript code die ik al heb en vanaf hier heb ik geen idee hoe verder te gaan:
Const Symboltypecommentend = 5
Const Symboltypecommentline = 6
Const Symboltypecommentstart = 4
Const Symboltypeend = 3
Const Symboltypeerror = 7
Const Symboltypenonterminal = 0
Const Symboltypeterminal = 1
Const Symboltypewhitespace = 2
Const Gpmsgaccept = 3
Const Gpmsgcommentblockread = 9
Const Gpmsgcommenterror = 7
Const Gpmsgcommentlineread = 10
Const Gpmsginternalerror = 8
Const Gpmsglexicalerror = 5
Const Gpmsgnotloadederror = 4
Const Gpmsgreduction = 2
Const Gpmsgsyntaxerror = 6
Const Gpmsgtokenread = 1
Const Rule_Statements1 = 0 ' <statements> ::= <statement> <statements>
Const Rule_Statements2 = 1 ' <statements> ::= <statement>
Const Rule_Statement_Nameisexpression = 2 ' <statement> ::= name '=' <expression>
Const Rule_Statement_Msgexpression = 3 ' <statement> ::= msg <expression>
Const Rule_Statement_Ifthenend = 4 ' <statement> ::= if <expression> then <statements> end
Const Rule_Statement_Ifthenelseend = 5 ' <statement> ::= if <expression> then <statements> else <statements> end
Const Rule_Expression_Biggerthen = 6 ' <expression> ::= <expression> '>' <add exp>
Const Rule_Expression_Smallerthen = 7 ' <expression> ::= <expression> '<' <add exp>
Const Rule_Expression_Biggerequalthen1 = 8 ' <expression> ::= <expression> '<=' <add exp>
Const Rule_Expression_Biggerequalthen2 = 9 ' <expression> ::= <expression> '>=' <add exp>
Const Rule_Expression_Smallerequalthen1 = 10' <expression> ::= <expression> '=>' <add exp>
Const Rule_Expression_Smallerequalthen2 = 11' <expression> ::= <expression> '=<' <add exp>
Const Rule_Expression_Equalthen = 12 ' <expression> ::= <expression> '=' <add exp>
Const Rule_Expression_Notequalthen = 13 ' <expression> ::= <expression> '!' <add exp>
Const Rule_Expression = 14 ' <expression> ::= <add exp>
Const Rule_Add_Plus = 15 ' <add exp> ::= <add exp> '+' <mult exp>
Const Rule_Add_Minus = 16 ' <add exp> ::= <add exp> '-' <mult exp>
Const Rule_Add_Amp = 17 ' <add exp> ::= <add exp> '&' <mult exp>
Const Rule_Add_Expression = 18 ' <add exp> ::= <mult exp>
Const Rule_Mult_Mult = 19 ' <mult exp> ::= <mult exp> '*' <value>
Const Rule_Mult_Div = 20 ' <mult exp> ::= <mult exp> '/' <value>
Const Rule_Mult_Value = 21 ' <mult exp> ::= <value>
Const Rule_Value_Name = 22 ' <value> ::= name
Const Rule_Value_String = 23 ' <value> ::= string
Const Rule_Value_Number = 24 ' <value> ::= number
Const Rule_Value_Groupedexpression = 25 ' <value> ::= '(' <expression> ')'
Set Parser = CreateObject("goldparserengine.goldparser")
With Parser
.Loadcompiledgrammar "F:\Tom_Schrauwen\Projects\bezig nu!\verryBasic\test_script.cgt"
.Trimreductions = True
.Openfile "F:\Tom_Schrauwen\Projects\bezig nu!\verryBasic\program.txt"
End With
Done = False
Do
Response = Parser.Parse()
Select Case Response
Case Gpmsglexicalerror
Call Msg("Illegal or unrecognized token!", True)
Case Gpmsgsyntaxerror
Call Msg("Token not expected!", True)
Case Gpmsgcommenterror
Call Msg("Comment was not terminated!", True)
Case Gpmsginternalerror
Call Msg("Something horrid happened inside the parser!", True)
Case Gpmsgnotloadederror
Call Msg("Compiled grammar not loaded!", True)
Case Gpmsgtokenread
'Call Msg("[CURRENT TOKEN]=[" & Parser.Currenttoken.Name & "]", false)
Case Gpmsgcommentblockread
Call Msg("This script can't contain block comments!", True)
Case Gpmsgcommentlineread
'comment line read..
Case Gpmsgreduction
Select Case Parser.Currentreduction.Parentrule.Tableindex
Case Rule_Statements1
msgbox "Rule_Statements1"
Case Rule_Statements2
msgbox "Rule_Statements2"
Case Rule_Statement_Nameisexpression
msgbox "Rule_Statement_Nameisexpression"
Case Rule_Statement_Msgexpression
msgbox "Rule_Statement_Msgexpression"
Case Rule_Statement_Ifthenend
msgbox "Rule_Statement_Ifthenend"
Case Rule_Statement_Ifthenelseend
msgbox "Rule_Statement_Ifthenelseend"
Case Rule_Expression_Biggerthen, Rule_Expression_Smallerthen, Rule_Expression_Biggerequalthen1, Rule_Expression_Biggerequalthen2, Rule_Expression_Smallerequalthen1, Rule_Expression_Smallerequalthen2, Rule_Expression_Equalthen, Rule_Expression_Notequalthen
msgbox "Rule_Expression ..."
Case Rule_Add_Plus
msgbox "Rule_Add_Plus"
Case Rule_Add_Minus
msgbox "Rule_Add_Minus"
Case Rule_Add_Amp
msgbox "Rule_Add_Amp"
Case Rule_Mult_Mult
msgbox "Rule_Mult_Mult"
Case Rule_Mult_Div
msgbox "Rule_Mult_Div"
Case Rule_Mult_Value
msgbox "Rule_Mult_Value"
Case Rule_Value_Name
msgbox "Rule_Value_Name"
Case Rule_Value_String
msgbox "Rule_Value_String"
Case Rule_Value_Number
msgbox "Rule_Value_Number"
Case Rule_Value_Groupedexpression
msgbox "Rule_Value_Groupedexpression"
'this 2 case options are ignored because of "TrimReductions = True"
'Case Rule_Expression
'Case Rule_Add_Expression
End Select
Case Gpmsgaccept
Msgbox "Done!",32
Done = True
End Select
Loop Until Done = True
Sub Msg(Input, Bool)
MsgBox Input
If Bool Then WScript.Quit
End Sub