diff --git a/basic/let.cpp b/basic/let.cpp index f28d153..20ef72d 100644 --- a/basic/let.cpp +++ b/basic/let.cpp @@ -195,7 +195,7 @@ void assignRecreate(Recreator &recreator, RpnItemPtr &rpnItem) std::stack stack; stack.emplace(recreator.popString()); // push value - std::string separator = ' ' + rpnItem->token()->name() + ' '; + std::string separator = ' ' + Table::entry(Eq_Code)->name() + ' '; while (!recreator.empty()) { stack.emplace(recreator.popString() + separator); diff --git a/table.cpp b/table.cpp index bc89869..d85830c 100644 --- a/table.cpp +++ b/table.cpp @@ -688,19 +688,19 @@ static TableEntry tableEntries[] = //*************************** { // Assign_Code Type{}, - "=", "Assign", "LET", + "", "Assign", "LET", Reference_Flag | Command_Flag, 4, &Dbl_Dbl_ExprInfo, NULL, NULL, NULL, NULL, assignRecreate }, { // AssignInt_Code Type{}, - "=", "Assign%", "LET", + "", "Assign%", "LET", Reference_Flag | Command_Flag, 4, &Int_Int_ExprInfo, NULL, NULL, NULL, NULL, assignRecreate }, { // AssignStr_Code Type{}, - "=", "Assign$", "LET", + "", "Assign$", "LET", Reference_Flag | Command_Flag, 4, &Str_Str_ExprInfo, NULL, NULL, NULL, NULL, assignStrRecreate }, @@ -730,19 +730,19 @@ static TableEntry tableEntries[] = }, { // AssignList_Code Type{}, - "=", "AssignList", "LET", + "", "AssignList", "LET", Reference_Flag | Command_Flag, 4, &Dbl_Dbl_ExprInfo, NULL, NULL, NULL, NULL, assignRecreate }, { // AssignListInt_Code Type{}, - "=", "AssignList%", "LET", + "", "AssignList%", "LET", Reference_Flag | Command_Flag, 4, &Int_Int_ExprInfo, NULL, NULL, NULL, NULL, assignRecreate }, { // AssignListStr_Code Type{}, - "=", "AssignList$", "LET", + "", "AssignList$", "LET", Reference_Flag | Command_Flag, 4, &Str_Str_ExprInfo, NULL, NULL, NULL, NULL, assignRecreate }, diff --git a/test/encoder01.out b/test/encoder01.out index f97f0bc..d9fae72 100644 --- a/test/encoder01.out +++ b/test/encoder01.out @@ -3,19 +3,19 @@ Input: REM This is a sample program Output: 0:REM 1:|0: This is a sample program| Input: A=5 -Output: 0:VarRef 1:|0:A| 2:Const 3:|0:5| 4:=Assign +Output: 0:VarRef 1:|0:A| 2:Const 3:|0:5| 4:Assign Input: PRINT A Output: 0:Var 1:|0:A| 2:PrintDbl 3:PRINT Input: B%=6:REM comment -Output: 0:VarRefInt 1:|0:B%| 2:ConstInt 3:|1:6| 4:=Assign%':' 5:REM 6:|1: comment| +Output: 0:VarRefInt 1:|0:B%| 2:ConstInt 3:|1:6| 4:Assign%':' 5:REM 6:|1: comment| Input: PRINT B% Output: 0:VarInt 1:|0:B%| 2:PrintInt 3:PRINT Input: C$="Test" -Output: 0:VarRefStr 1:|0:C$| 2:ConstStr 3:|0:Test| 4:=Assign$ +Output: 0:VarRefStr 1:|0:C$| 2:ConstStr 3:|0:Test| 4:Assign$ Input: PRINT C$' not much to see here Output: 0:VarStr 1:|0:C$| 2:PrintStr 3:PRINT 4:' 5:|2: not much to see here| @@ -24,19 +24,19 @@ Input: Output: Input: INPUT PROMPT "Enter:";D%:LET E=SQR(D%):PRINT D%,E' comment -Output: 0:ConstStr 1:|1:Enter:| 2:InputParseInt 3:InputBeginStr 4:VarRefInt 5:|1:D%| 6:InputAssignInt 7:INPUTPROMPT':' 8:VarRef 9:|1:E| 10:VarInt 11:|1:D%| 12:CvtDbl 13:SQR( 14:=Assign'LET:' 15:VarInt 16:|1:D%| 17:PrintInt 18:, 19:Var 20:|1:E| 21:PrintDbl 22:PRINT 23:' 24:|1: comment| +Output: 0:ConstStr 1:|1:Enter:| 2:InputParseInt 3:InputBeginStr 4:VarRefInt 5:|1:D%| 6:InputAssignInt 7:INPUTPROMPT':' 8:VarRef 9:|1:E| 10:VarInt 11:|1:D%| 12:CvtDbl 13:SQR( 14:Assign'LET:' 15:VarInt 16:|1:D%| 17:PrintInt 18:, 19:Var 20:|1:E| 21:PrintDbl 22:PRINT 23:' 24:|1: comment| Input: Output: Input: A=A+B+C -Output: 0:VarRef 1:|0:A| 2:Var 3:|0:A| 4:Var 5:|2:B| 6:+ 7:Var 8:|3:C| 9:+ 10:=Assign +Output: 0:VarRef 1:|0:A| 2:Var 3:|0:A| 4:Var 5:|2:B| 6:+ 7:Var 8:|3:C| 9:+ 10:Assign Input: PRINT A,B,C Output: 0:Var 1:|0:A| 2:PrintDbl 3:, 4:Var 5:|2:B| 6:PrintDbl 7:, 8:Var 9:|3:C| 10:PrintDbl 11:PRINT Input: A$="Test"+CHR$(B%+48) -Output: 0:VarRefStr 1:|1:A$| 2:ConstStr 3:|0:Test| 4:VarInt 5:|0:B%| 6:ConstInt 7:|2:48| 8:+% 9:CHR$( 10:+$ 11:=Assign$ +Output: 0:VarRefStr 1:|1:A$| 2:ConstStr 3:|0:Test| 4:VarInt 5:|0:B%| 6:ConstInt 7:|2:48| 8:+% 9:CHR$( 10:+$ 11:Assign$ Input: PRINT B%;A$ Output: 0:VarInt 1:|0:B%| 2:PrintInt 3:VarStr 4:|1:A$| 5:PrintStr 6:PRINT @@ -48,13 +48,13 @@ Input: 'reuse some constants, have some new constants Output: 0:' 1:|3:reuse some constants, have some new constants| Input: C%=B%+6 -Output: 0:VarRefInt 1:|2:C%| 2:VarInt 3:|0:B%| 4:ConstInt 5:|1:6| 6:+% 7:=Assign% +Output: 0:VarRefInt 1:|2:C%| 2:VarInt 3:|0:B%| 4:ConstInt 5:|1:6| 6:+% 7:Assign% Input: rem reuse previous double constant as double Output: 0:REM 1:|4: reuse previous double constant as double| Input: D%=C%+5 -Output: 0:VarRefInt 1:|1:D%| 2:VarInt 3:|2:C%| 4:ConstInt 5:|0:5| 6:+% 7:=Assign% +Output: 0:VarRefInt 1:|1:D%| 2:VarInt 3:|2:C%| 4:ConstInt 5:|0:5| 6:+% 7:Assign% Input: 'same constant but as string; should be separate string constant Output: 0:' 1:|5:same constant but as string; should be separate string constant| @@ -67,24 +67,24 @@ Output: 0:ConstStr 1:|3:Quote"Test| 2:PrintStr 3:PRINT Program: 0: [0-1] 0:REM 1:|0: This is a sample program| -1: [2-6] 0:VarRef 1:|0:A| 2:Const 3:|0:5| 4:=Assign +1: [2-6] 0:VarRef 1:|0:A| 2:Const 3:|0:5| 4:Assign 2: [7-10] 0:Var 1:|0:A| 2:PrintDbl 3:PRINT -3: [11-17] 0:VarRefInt 1:|0:B%| 2:ConstInt 3:|1:6| 4:=Assign%':' 5:REM 6:|1: comment| +3: [11-17] 0:VarRefInt 1:|0:B%| 2:ConstInt 3:|1:6| 4:Assign%':' 5:REM 6:|1: comment| 4: [18-21] 0:VarInt 1:|0:B%| 2:PrintInt 3:PRINT -5: [22-26] 0:VarRefStr 1:|0:C$| 2:ConstStr 3:|0:Test| 4:=Assign$ +5: [22-26] 0:VarRefStr 1:|0:C$| 2:ConstStr 3:|0:Test| 4:Assign$ 6: [27-32] 0:VarStr 1:|0:C$| 2:PrintStr 3:PRINT 4:' 5:|2: not much to see here| 7: [33] -8: [33-57] 0:ConstStr 1:|1:Enter:| 2:InputParseInt 3:InputBeginStr 4:VarRefInt 5:|1:D%| 6:InputAssignInt 7:INPUTPROMPT':' 8:VarRef 9:|1:E| 10:VarInt 11:|1:D%| 12:CvtDbl 13:SQR( 14:=Assign'LET:' 15:VarInt 16:|1:D%| 17:PrintInt 18:, 19:Var 20:|1:E| 21:PrintDbl 22:PRINT 23:' 24:|1: comment| +8: [33-57] 0:ConstStr 1:|1:Enter:| 2:InputParseInt 3:InputBeginStr 4:VarRefInt 5:|1:D%| 6:InputAssignInt 7:INPUTPROMPT':' 8:VarRef 9:|1:E| 10:VarInt 11:|1:D%| 12:CvtDbl 13:SQR( 14:Assign'LET:' 15:VarInt 16:|1:D%| 17:PrintInt 18:, 19:Var 20:|1:E| 21:PrintDbl 22:PRINT 23:' 24:|1: comment| 9: [58] -10: [58-68] 0:VarRef 1:|0:A| 2:Var 3:|0:A| 4:Var 5:|2:B| 6:+ 7:Var 8:|3:C| 9:+ 10:=Assign +10: [58-68] 0:VarRef 1:|0:A| 2:Var 3:|0:A| 4:Var 5:|2:B| 6:+ 7:Var 8:|3:C| 9:+ 10:Assign 11: [69-80] 0:Var 1:|0:A| 2:PrintDbl 3:, 4:Var 5:|2:B| 6:PrintDbl 7:, 8:Var 9:|3:C| 10:PrintDbl 11:PRINT -12: [81-92] 0:VarRefStr 1:|1:A$| 2:ConstStr 3:|0:Test| 4:VarInt 5:|0:B%| 6:ConstInt 7:|2:48| 8:+% 9:CHR$( 10:+$ 11:=Assign$ +12: [81-92] 0:VarRefStr 1:|1:A$| 2:ConstStr 3:|0:Test| 4:VarInt 5:|0:B%| 6:ConstInt 7:|2:48| 8:+% 9:CHR$( 10:+$ 11:Assign$ 13: [93-99] 0:VarInt 1:|0:B%| 2:PrintInt 3:VarStr 4:|1:A$| 5:PrintStr 6:PRINT 14: [100] 15: [100-101] 0:' 1:|3:reuse some constants, have some new constants| -16: [102-109] 0:VarRefInt 1:|2:C%| 2:VarInt 3:|0:B%| 4:ConstInt 5:|1:6| 6:+% 7:=Assign% +16: [102-109] 0:VarRefInt 1:|2:C%| 2:VarInt 3:|0:B%| 4:ConstInt 5:|1:6| 6:+% 7:Assign% 17: [110-111] 0:REM 1:|4: reuse previous double constant as double| -18: [112-119] 0:VarRefInt 1:|1:D%| 2:VarInt 3:|2:C%| 4:ConstInt 5:|0:5| 6:+% 7:=Assign% +18: [112-119] 0:VarRefInt 1:|1:D%| 2:VarInt 3:|2:C%| 4:ConstInt 5:|0:5| 6:+% 7:Assign% 19: [120-121] 0:' 1:|5:same constant but as string; should be separate string constant| 20: [122-133] 0:ConstStr 1:|0:Test| 2:PrintStr 3:, 4:VarInt 5:|2:C%| 6:PrintInt 7:, 8:ConstStr 9:|2:5| 10:PrintStr 11:PRINT 21: [134-137] 0:ConstStr 1:|3:Quote"Test| 2:PrintStr 3:PRINT diff --git a/test/encoder01.txt b/test/encoder01.txt index fc8541a..6048c30 100644 --- a/test/encoder01.txt +++ b/test/encoder01.txt @@ -3,19 +3,19 @@ Input: REM This is a sample program Output: 0:REM 1:|0: This is a sample program| Input: A=5 -Output: 0:VarRef 1:|0:A| 2:Const 3:|0:5| 4:=Assign +Output: 0:VarRef 1:|0:A| 2:Const 3:|0:5| 4:Assign Input: PRINT A Output: 0:Var 1:|0:A| 2:PrintDbl 3:PRINT Input: B%=6:REM comment -Output: 0:VarRefInt 1:|0:B%| 2:ConstInt 3:|1:6| 4:=Assign%':' 5:REM 6:|1: comment| +Output: 0:VarRefInt 1:|0:B%| 2:ConstInt 3:|1:6| 4:Assign%':' 5:REM 6:|1: comment| Input: PRINT B% Output: 0:VarInt 1:|0:B%| 2:PrintInt 3:PRINT Input: C$="Test" -Output: 0:VarRefStr 1:|0:C$| 2:ConstStr 3:|0:Test| 4:=Assign$ +Output: 0:VarRefStr 1:|0:C$| 2:ConstStr 3:|0:Test| 4:Assign$ Input: PRINT C$' not much to see here Output: 0:VarStr 1:|0:C$| 2:PrintStr 3:PRINT 4:' 5:|2: not much to see here| @@ -24,19 +24,19 @@ Input: Output: Input: INPUT PROMPT "Enter:";D%:LET E=SQR(D%):PRINT D%,E' comment -Output: 0:ConstStr 1:|1:Enter:| 2:InputParseInt 3:InputBeginStr 4:VarRefInt 5:|1:D%| 6:InputAssignInt 7:INPUTPROMPT':' 8:VarRef 9:|1:E| 10:VarInt 11:|1:D%| 12:CvtDbl 13:SQR( 14:=Assign'LET:' 15:VarInt 16:|1:D%| 17:PrintInt 18:, 19:Var 20:|1:E| 21:PrintDbl 22:PRINT 23:' 24:|1: comment| +Output: 0:ConstStr 1:|1:Enter:| 2:InputParseInt 3:InputBeginStr 4:VarRefInt 5:|1:D%| 6:InputAssignInt 7:INPUTPROMPT':' 8:VarRef 9:|1:E| 10:VarInt 11:|1:D%| 12:CvtDbl 13:SQR( 14:Assign'LET:' 15:VarInt 16:|1:D%| 17:PrintInt 18:, 19:Var 20:|1:E| 21:PrintDbl 22:PRINT 23:' 24:|1: comment| Input: Output: Input: A=A+B+C -Output: 0:VarRef 1:|0:A| 2:Var 3:|0:A| 4:Var 5:|2:B| 6:+ 7:Var 8:|3:C| 9:+ 10:=Assign +Output: 0:VarRef 1:|0:A| 2:Var 3:|0:A| 4:Var 5:|2:B| 6:+ 7:Var 8:|3:C| 9:+ 10:Assign Input: PRINT A,B,C Output: 0:Var 1:|0:A| 2:PrintDbl 3:, 4:Var 5:|2:B| 6:PrintDbl 7:, 8:Var 9:|3:C| 10:PrintDbl 11:PRINT Input: A$="Test"+CHR$(B%+48) -Output: 0:VarRefStr 1:|1:A$| 2:ConstStr 3:|0:Test| 4:VarInt 5:|0:B%| 6:ConstInt 7:|2:48| 8:+% 9:CHR$( 10:+$ 11:=Assign$ +Output: 0:VarRefStr 1:|1:A$| 2:ConstStr 3:|0:Test| 4:VarInt 5:|0:B%| 6:ConstInt 7:|2:48| 8:+% 9:CHR$( 10:+$ 11:Assign$ Input: PRINT B%;A$ Output: 0:VarInt 1:|0:B%| 2:PrintInt 3:VarStr 4:|1:A$| 5:PrintStr 6:PRINT @@ -48,13 +48,13 @@ Input: 'reuse some constants, have some new constants Output: 0:' 1:|3:reuse some constants, have some new constants| Input: C%=B%+6 -Output: 0:VarRefInt 1:|2:C%| 2:VarInt 3:|0:B%| 4:ConstInt 5:|1:6| 6:+% 7:=Assign% +Output: 0:VarRefInt 1:|2:C%| 2:VarInt 3:|0:B%| 4:ConstInt 5:|1:6| 6:+% 7:Assign% Input: rem reuse previous double constant as double Output: 0:REM 1:|4: reuse previous double constant as double| Input: D%=C%+5 -Output: 0:VarRefInt 1:|1:D%| 2:VarInt 3:|2:C%| 4:ConstInt 5:|0:5| 6:+% 7:=Assign% +Output: 0:VarRefInt 1:|1:D%| 2:VarInt 3:|2:C%| 4:ConstInt 5:|0:5| 6:+% 7:Assign% Input: 'same constant but as string; should be separate string constant Output: 0:' 1:|5:same constant but as string; should be separate string constant| @@ -67,24 +67,24 @@ Output: 0:ConstStr 1:|3:Quote"Test| 2:PrintStr 3:PRINT Program: 0: [0-1] 0:REM 1:|0: This is a sample program| -1: [2-6] 0:VarRef 1:|0:A| 2:Const 3:|0:5| 4:=Assign +1: [2-6] 0:VarRef 1:|0:A| 2:Const 3:|0:5| 4:Assign 2: [7-10] 0:Var 1:|0:A| 2:PrintDbl 3:PRINT -3: [11-17] 0:VarRefInt 1:|0:B%| 2:ConstInt 3:|1:6| 4:=Assign%':' 5:REM 6:|1: comment| +3: [11-17] 0:VarRefInt 1:|0:B%| 2:ConstInt 3:|1:6| 4:Assign%':' 5:REM 6:|1: comment| 4: [18-21] 0:VarInt 1:|0:B%| 2:PrintInt 3:PRINT -5: [22-26] 0:VarRefStr 1:|0:C$| 2:ConstStr 3:|0:Test| 4:=Assign$ +5: [22-26] 0:VarRefStr 1:|0:C$| 2:ConstStr 3:|0:Test| 4:Assign$ 6: [27-32] 0:VarStr 1:|0:C$| 2:PrintStr 3:PRINT 4:' 5:|2: not much to see here| 7: [33] -8: [33-57] 0:ConstStr 1:|1:Enter:| 2:InputParseInt 3:InputBeginStr 4:VarRefInt 5:|1:D%| 6:InputAssignInt 7:INPUTPROMPT':' 8:VarRef 9:|1:E| 10:VarInt 11:|1:D%| 12:CvtDbl 13:SQR( 14:=Assign'LET:' 15:VarInt 16:|1:D%| 17:PrintInt 18:, 19:Var 20:|1:E| 21:PrintDbl 22:PRINT 23:' 24:|1: comment| +8: [33-57] 0:ConstStr 1:|1:Enter:| 2:InputParseInt 3:InputBeginStr 4:VarRefInt 5:|1:D%| 6:InputAssignInt 7:INPUTPROMPT':' 8:VarRef 9:|1:E| 10:VarInt 11:|1:D%| 12:CvtDbl 13:SQR( 14:Assign'LET:' 15:VarInt 16:|1:D%| 17:PrintInt 18:, 19:Var 20:|1:E| 21:PrintDbl 22:PRINT 23:' 24:|1: comment| 9: [58] -10: [58-68] 0:VarRef 1:|0:A| 2:Var 3:|0:A| 4:Var 5:|2:B| 6:+ 7:Var 8:|3:C| 9:+ 10:=Assign +10: [58-68] 0:VarRef 1:|0:A| 2:Var 3:|0:A| 4:Var 5:|2:B| 6:+ 7:Var 8:|3:C| 9:+ 10:Assign 11: [69-80] 0:Var 1:|0:A| 2:PrintDbl 3:, 4:Var 5:|2:B| 6:PrintDbl 7:, 8:Var 9:|3:C| 10:PrintDbl 11:PRINT -12: [81-92] 0:VarRefStr 1:|1:A$| 2:ConstStr 3:|0:Test| 4:VarInt 5:|0:B%| 6:ConstInt 7:|2:48| 8:+% 9:CHR$( 10:+$ 11:=Assign$ +12: [81-92] 0:VarRefStr 1:|1:A$| 2:ConstStr 3:|0:Test| 4:VarInt 5:|0:B%| 6:ConstInt 7:|2:48| 8:+% 9:CHR$( 10:+$ 11:Assign$ 13: [93-99] 0:VarInt 1:|0:B%| 2:PrintInt 3:VarStr 4:|1:A$| 5:PrintStr 6:PRINT 14: [100] 15: [100-101] 0:' 1:|3:reuse some constants, have some new constants| -16: [102-109] 0:VarRefInt 1:|2:C%| 2:VarInt 3:|0:B%| 4:ConstInt 5:|1:6| 6:+% 7:=Assign% +16: [102-109] 0:VarRefInt 1:|2:C%| 2:VarInt 3:|0:B%| 4:ConstInt 5:|1:6| 6:+% 7:Assign% 17: [110-111] 0:REM 1:|4: reuse previous double constant as double| -18: [112-119] 0:VarRefInt 1:|1:D%| 2:VarInt 3:|2:C%| 4:ConstInt 5:|0:5| 6:+% 7:=Assign% +18: [112-119] 0:VarRefInt 1:|1:D%| 2:VarInt 3:|2:C%| 4:ConstInt 5:|0:5| 6:+% 7:Assign% 19: [120-121] 0:' 1:|5:same constant but as string; should be separate string constant| 20: [122-133] 0:ConstStr 1:|0:Test| 2:PrintStr 3:, 4:VarInt 5:|2:C%| 6:PrintInt 7:, 8:ConstStr 9:|2:5| 10:PrintStr 11:PRINT 21: [134-137] 0:ConstStr 1:|3:Quote"Test| 2:PrintStr 3:PRINT diff --git a/test/encoder02.out b/test/encoder02.out index beaf67a..6c193e1 100644 --- a/test/encoder02.out +++ b/test/encoder02.out @@ -4,24 +4,24 @@ Input: LET'error! Program: 0: [0-1] 0:REM 1:|0: This is a sample program| -1: [2-6] 0:VarRef 1:|0:A| 2:Const 3:|0:5| 4:=Assign +1: [2-6] 0:VarRef 1:|0:A| 2:Const 3:|0:5| 4:Assign 2: [7-10] 0:Var 1:|0:A| 2:PrintDbl 3:PRINT -3: [11-21] 0:VarRefInt 1:|0:B%| 2:Var 3:|0:A| 4:Const 5:|1:6| 6:+ 7:CvtInt 8:=Assign%':' 9:REM 10:|6: replaced with larger line| +3: [11-21] 0:VarRefInt 1:|0:B%| 2:Var 3:|0:A| 4:Const 5:|1:6| 6:+ 7:CvtInt 8:Assign%':' 9:REM 10:|6: replaced with larger line| 4: [22-25] 0:VarInt 1:|0:B%| 2:PrintInt 3:PRINT -5: [26-31] 0:VarRefStr 1:|2:D$| 2:VarInt 3:|0:B%| 4:STR$(% 5:=Assign$ +5: [26-31] 0:VarRefStr 1:|2:D$| 2:VarInt 3:|0:B%| 4:STR$(% 5:Assign$ 6: [32] 7: [32-37] 0:VarStr 1:|2:D$| 2:PrintStr 3:PRINT 4:' 5:|2: something useful| -8: [38-62] 0:ConstStr 1:|1:Enter:| 2:InputParseInt 3:InputBeginStr 4:VarRefInt 5:|3:N%| 6:InputAssignInt 7:INPUTPROMPT':' 8:VarRef 9:|1:E| 10:VarInt 11:|3:N%| 12:CvtDbl 13:SQR( 14:=Assign'LET:' 15:VarInt 16:|3:N%| 17:PrintInt 18:, 19:Var 20:|1:E| 21:PrintDbl 22:PRINT 23:' 24:|1: replaced with same size line| +8: [38-62] 0:ConstStr 1:|1:Enter:| 2:InputParseInt 3:InputBeginStr 4:VarRefInt 5:|3:N%| 6:InputAssignInt 7:INPUTPROMPT':' 8:VarRef 9:|1:E| 10:VarInt 11:|3:N%| 12:CvtDbl 13:SQR( 14:Assign'LET:' 15:VarInt 16:|3:N%| 17:PrintInt 18:, 19:Var 20:|1:E| 21:PrintDbl 22:PRINT 23:' 24:|1: replaced with same size line| 9: [63] -10: [63-73] 0:VarRefStr 1:|1:A$| 2:VarInt 3:|0:B%| 4:ConstInt 5:|2:48| 6:+% 7:CHR$( 8:=Assign$ 9:' 10:|7: replaced with smaller line| +10: [63-73] 0:VarRefStr 1:|1:A$| 2:VarInt 3:|0:B%| 4:ConstInt 5:|2:48| 6:+% 7:CHR$( 8:Assign$ 9:' 10:|7: replaced with smaller line| 11: [74-85] 0:Var 1:|0:A| 2:PrintDbl 3:, 4:Var 5:|2:B| 6:PrintDbl 7:, 8:Var 9:|3:C| 10:PrintDbl 11:PRINT -12: [86-97] 0:VarRefStr 1:|1:A$| 2:ConstStr 3:|0:Test| 4:VarInt 5:|0:B%| 6:ConstInt 7:|2:48| 8:+% 9:CHR$( 10:+$ 11:=Assign$ +12: [86-97] 0:VarRefStr 1:|1:A$| 2:ConstStr 3:|0:Test| 4:VarInt 5:|0:B%| 6:ConstInt 7:|2:48| 8:+% 9:CHR$( 10:+$ 11:Assign$ 13: [98-104] 0:VarInt 1:|0:B%| 2:PrintInt 3:VarStr 4:|1:A$| 5:PrintStr 6:PRINT 14: [105-105] 0:PRINT 15: [106-107] 0:' 1:|3:reuse some constants, have some new constants| -16: [108-115] 0:VarRefInt 1:|2:C%| 2:VarInt 3:|0:B%| 4:ConstInt 5:|1:6| 6:+% 7:=Assign% +16: [108-115] 0:VarRefInt 1:|2:C%| 2:VarInt 3:|0:B%| 4:ConstInt 5:|1:6| 6:+% 7:Assign% 17: [116-117] 0:REM 1:|4: reuse previous double constant as double| -18: [118-125] 0:VarRefInt 1:|1:D%| 2:VarInt 3:|2:C%| 4:ConstInt 5:|0:5| 6:+% 7:=Assign% +18: [118-125] 0:VarRefInt 1:|1:D%| 2:VarInt 3:|2:C%| 4:ConstInt 5:|0:5| 6:+% 7:Assign% 19: [126] ERROR 3:1 expected item for assignment 20: [126-137] 0:ConstStr 1:|0:Test| 2:PrintStr 3:, 4:VarInt 5:|2:C%| 6:PrintInt 7:, 8:ConstStr 9:|2:5| 10:PrintStr 11:PRINT 21: [138-146] 0:ConstStr 1:|3:Quote"Test| 2:PrintStr 3:VarInt 4:|1:D%| 5:PrintInt 6:PRINT 7:' 8:|8: replace last line with larger line| diff --git a/test/encoder02.txt b/test/encoder02.txt index 428162e..376ade0 100644 --- a/test/encoder02.txt +++ b/test/encoder02.txt @@ -4,24 +4,24 @@ Input: LET'error! Program: 0: [0-1] 0:REM 1:|0: This is a sample program| -1: [2-6] 0:VarRef 1:|0:A| 2:Const 3:|0:5| 4:=Assign +1: [2-6] 0:VarRef 1:|0:A| 2:Const 3:|0:5| 4:Assign 2: [7-10] 0:Var 1:|0:A| 2:PrintDbl 3:PRINT -3: [11-21] 0:VarRefInt 1:|0:B%| 2:Var 3:|0:A| 4:Const 5:|1:6| 6:+ 7:CvtInt 8:=Assign%':' 9:REM 10:|6: replaced with larger line| +3: [11-21] 0:VarRefInt 1:|0:B%| 2:Var 3:|0:A| 4:Const 5:|1:6| 6:+ 7:CvtInt 8:Assign%':' 9:REM 10:|6: replaced with larger line| 4: [22-25] 0:VarInt 1:|0:B%| 2:PrintInt 3:PRINT -5: [26-31] 0:VarRefStr 1:|2:D$| 2:VarInt 3:|0:B%| 4:STR$(% 5:=Assign$ +5: [26-31] 0:VarRefStr 1:|2:D$| 2:VarInt 3:|0:B%| 4:STR$(% 5:Assign$ 6: [32] 7: [32-37] 0:VarStr 1:|2:D$| 2:PrintStr 3:PRINT 4:' 5:|2: something useful| -8: [38-62] 0:ConstStr 1:|1:Enter:| 2:InputParseInt 3:InputBeginStr 4:VarRefInt 5:|3:N%| 6:InputAssignInt 7:INPUTPROMPT':' 8:VarRef 9:|1:E| 10:VarInt 11:|3:N%| 12:CvtDbl 13:SQR( 14:=Assign'LET:' 15:VarInt 16:|3:N%| 17:PrintInt 18:, 19:Var 20:|1:E| 21:PrintDbl 22:PRINT 23:' 24:|1: replaced with same size line| +8: [38-62] 0:ConstStr 1:|1:Enter:| 2:InputParseInt 3:InputBeginStr 4:VarRefInt 5:|3:N%| 6:InputAssignInt 7:INPUTPROMPT':' 8:VarRef 9:|1:E| 10:VarInt 11:|3:N%| 12:CvtDbl 13:SQR( 14:Assign'LET:' 15:VarInt 16:|3:N%| 17:PrintInt 18:, 19:Var 20:|1:E| 21:PrintDbl 22:PRINT 23:' 24:|1: replaced with same size line| 9: [63] -10: [63-73] 0:VarRefStr 1:|1:A$| 2:VarInt 3:|0:B%| 4:ConstInt 5:|2:48| 6:+% 7:CHR$( 8:=Assign$ 9:' 10:|7: replaced with smaller line| +10: [63-73] 0:VarRefStr 1:|1:A$| 2:VarInt 3:|0:B%| 4:ConstInt 5:|2:48| 6:+% 7:CHR$( 8:Assign$ 9:' 10:|7: replaced with smaller line| 11: [74-85] 0:Var 1:|0:A| 2:PrintDbl 3:, 4:Var 5:|2:B| 6:PrintDbl 7:, 8:Var 9:|3:C| 10:PrintDbl 11:PRINT -12: [86-97] 0:VarRefStr 1:|1:A$| 2:ConstStr 3:|0:Test| 4:VarInt 5:|0:B%| 6:ConstInt 7:|2:48| 8:+% 9:CHR$( 10:+$ 11:=Assign$ +12: [86-97] 0:VarRefStr 1:|1:A$| 2:ConstStr 3:|0:Test| 4:VarInt 5:|0:B%| 6:ConstInt 7:|2:48| 8:+% 9:CHR$( 10:+$ 11:Assign$ 13: [98-104] 0:VarInt 1:|0:B%| 2:PrintInt 3:VarStr 4:|1:A$| 5:PrintStr 6:PRINT 14: [105-105] 0:PRINT 15: [106-107] 0:' 1:|3:reuse some constants, have some new constants| -16: [108-115] 0:VarRefInt 1:|2:C%| 2:VarInt 3:|0:B%| 4:ConstInt 5:|1:6| 6:+% 7:=Assign% +16: [108-115] 0:VarRefInt 1:|2:C%| 2:VarInt 3:|0:B%| 4:ConstInt 5:|1:6| 6:+% 7:Assign% 17: [116-117] 0:REM 1:|4: reuse previous double constant as double| -18: [118-125] 0:VarRefInt 1:|1:D%| 2:VarInt 3:|2:C%| 4:ConstInt 5:|0:5| 6:+% 7:=Assign% +18: [118-125] 0:VarRefInt 1:|1:D%| 2:VarInt 3:|2:C%| 4:ConstInt 5:|0:5| 6:+% 7:Assign% 19: [126] ERROR 3:1 expected item for assignment 20: [126-137] 0:ConstStr 1:|0:Test| 2:PrintStr 3:, 4:VarInt 5:|2:C%| 6:PrintInt 7:, 8:ConstStr 9:|2:5| 10:PrintStr 11:PRINT 21: [138-146] 0:ConstStr 1:|3:Quote"Test| 2:PrintStr 3:VarInt 4:|1:D%| 5:PrintInt 6:PRINT 7:' 8:|8: replace last line with larger line| diff --git a/test/encoder03.out b/test/encoder03.out index ee75ce4..0819f0f 100644 --- a/test/encoder03.out +++ b/test/encoder03.out @@ -1,15 +1,15 @@ Program: -0: [0-4] 0:VarRefInt 1:|0:Var%| 2:ConstInt 3:|0:4| 4:=Assign% -1: [5-12] 0:VarRefInt 1:|0:Var%| 2:VarInt 3:|0:Var%| 4:ConstInt 5:|1:1| 6:+% 7:=Assign% +0: [0-4] 0:VarRefInt 1:|0:Var%| 2:ConstInt 3:|0:4| 4:Assign% +1: [5-12] 0:VarRefInt 1:|0:Var%| 2:VarInt 3:|0:Var%| 4:ConstInt 5:|1:1| 6:+% 7:Assign% 2: [13-14] 0:REM 1:|0: comment| 3: [15-16] 0:REM 1:|1: Comment| 4: [17-18] 0:REM 1:|2: COMMENT| -5: [19-23] 0:VarRefStr 1:|0:Var$| 2:ConstStr 3:|0:Test| 4:=Assign$ -6: [24-28] 0:VarRefStr 1:|0:Var$| 2:ConstStr 3:|1:TEST| 4:=Assign$ -7: [29-33] 0:VarRefStr 1:|0:Var$| 2:ConstStr 3:|2:test| 4:=Assign$ -8: [34-41] 0:VarRef 1:|0:Var| 2:Const 3:|2:1.23e45| 4:Const 5:|3:9.87E-4| 6:/ 7:=Assign -9: [42-52] 0:VarRef 1:|0:Var| 2:Var 3:|0:Var| 4:Const 5:|2:1.23e45| 6:* 7:Const 8:|3:9.87E-4| 9:/ 10:=Assign +5: [19-23] 0:VarRefStr 1:|0:Var$| 2:ConstStr 3:|0:Test| 4:Assign$ +6: [24-28] 0:VarRefStr 1:|0:Var$| 2:ConstStr 3:|1:TEST| 4:Assign$ +7: [29-33] 0:VarRefStr 1:|0:Var$| 2:ConstStr 3:|2:test| 4:Assign$ +8: [34-41] 0:VarRef 1:|0:Var| 2:Const 3:|2:1.23e45| 4:Const 5:|3:9.87E-4| 6:/ 7:Assign +9: [42-52] 0:VarRef 1:|0:Var| 2:Var 3:|0:Var| 4:Const 5:|2:1.23e45| 6:* 7:Const 8:|3:9.87E-4| 9:/ 10:Assign Remarks: 0: 1 | comment| diff --git a/test/encoder03.txt b/test/encoder03.txt index fa31fd7..761fee1 100644 --- a/test/encoder03.txt +++ b/test/encoder03.txt @@ -1,15 +1,15 @@ Program: -0: [0-4] 0:VarRefInt 1:|0:Var%| 2:ConstInt 3:|0:4| 4:=Assign% -1: [5-12] 0:VarRefInt 1:|0:Var%| 2:VarInt 3:|0:Var%| 4:ConstInt 5:|1:1| 6:+% 7:=Assign% +0: [0-4] 0:VarRefInt 1:|0:Var%| 2:ConstInt 3:|0:4| 4:Assign% +1: [5-12] 0:VarRefInt 1:|0:Var%| 2:VarInt 3:|0:Var%| 4:ConstInt 5:|1:1| 6:+% 7:Assign% 2: [13-14] 0:REM 1:|0: comment| 3: [15-16] 0:REM 1:|1: Comment| 4: [17-18] 0:REM 1:|2: COMMENT| -5: [19-23] 0:VarRefStr 1:|0:Var$| 2:ConstStr 3:|0:Test| 4:=Assign$ -6: [24-28] 0:VarRefStr 1:|0:Var$| 2:ConstStr 3:|1:TEST| 4:=Assign$ -7: [29-33] 0:VarRefStr 1:|0:Var$| 2:ConstStr 3:|2:test| 4:=Assign$ -8: [34-41] 0:VarRef 1:|0:Var| 2:Const 3:|2:1.23e45| 4:Const 5:|3:9.87E-4| 6:/ 7:=Assign -9: [42-52] 0:VarRef 1:|0:Var| 2:Var 3:|0:Var| 4:Const 5:|2:1.23e45| 6:* 7:Const 8:|3:9.87E-4| 9:/ 10:=Assign +5: [19-23] 0:VarRefStr 1:|0:Var$| 2:ConstStr 3:|0:Test| 4:Assign$ +6: [24-28] 0:VarRefStr 1:|0:Var$| 2:ConstStr 3:|1:TEST| 4:Assign$ +7: [29-33] 0:VarRefStr 1:|0:Var$| 2:ConstStr 3:|2:test| 4:Assign$ +8: [34-41] 0:VarRef 1:|0:Var| 2:Const 3:|2:1.23e45| 4:Const 5:|3:9.87E-4| 6:/ 7:Assign +9: [42-52] 0:VarRef 1:|0:Var| 2:Var 3:|0:Var| 4:Const 5:|2:1.23e45| 6:* 7:Const 8:|3:9.87E-4| 9:/ 10:Assign Remarks: 0: 1 | comment| diff --git a/test/translator01.txt b/test/translator01.txt index 3b4034a..6625c89 100644 --- a/test/translator01.txt +++ b/test/translator01.txt @@ -1,54 +1,54 @@ Input: A=3 -Output: A 3 =Assign +Output: A 3 Assign Input: A,B=3 -Output: A B 3 =AssignList +Output: A B 3 AssignList Input: A=B=3 -Output: A B 3 = CvtDbl =Assign +Output: A B 3 = CvtDbl Assign Input: A=(B)=3 -Output: A B')' 3 = CvtDbl =Assign +Output: A B')' 3 = CvtDbl Assign Input: A=(B=3) -Output: A B 3 =')' CvtDbl =Assign +Output: A B 3 =')' CvtDbl Assign Input: A,B=(C=3) -Output: A B C 3 =')' CvtDbl =AssignList +Output: A B C 3 =')' CvtDbl AssignList Input: A,B=C=4 -Output: A B C 4 = CvtDbl =AssignList +Output: A B C 4 = CvtDbl AssignList Input: A(B,C)=D -Output: B CvtInt C CvtInt A( D =Assign +Output: B CvtInt C CvtInt A( D Assign Input: A(B,C),E=D -Output: B CvtInt C CvtInt A( E D =AssignList +Output: B CvtInt C CvtInt A( E D AssignList Input: E,A(B,C)=D -Output: E B CvtInt C CvtInt A( D =AssignList +Output: E B CvtInt C CvtInt A( D AssignList Input: E,A(B,C),F=D -Output: E B CvtInt C CvtInt A( F D =AssignList +Output: E B CvtInt C CvtInt A( F D AssignList Input: A(B,(C))=D -Output: B CvtInt C')' CvtInt A( D =Assign +Output: B CvtInt C')' CvtInt A( D Assign Input: A(B+C)=D -Output: B C + CvtInt A( D =Assign +Output: B C + CvtInt A( D Assign Input: A(B=C)=D -Output: B C = A( D =Assign +Output: B C = A( D Assign Input: A(B+C,D=E)=F -Output: B C + CvtInt D E = A( F =Assign +Output: B C + CvtInt D E = A( F Assign Input: A(B,C)=D(E) -Output: B CvtInt C CvtInt A( E CvtInt D( =Assign +Output: B CvtInt C CvtInt A( E CvtInt D( Assign Input: A(B,C),D(E)=INT(F)+Function(G)+Array(H) -Output: B CvtInt C CvtInt A( E CvtInt D( F INT( G Function([10:G] + H CvtInt Array( + =AssignList +Output: B CvtInt C CvtInt A( E CvtInt D( F INT( G Function([10:G] + H CvtInt Array( + AssignList Input: A=B,C=4 ^-- expected operator or end-of-statement diff --git a/test/translator02.txt b/test/translator02.txt index 32569a5..1de016f 100644 --- a/test/translator02.txt +++ b/test/translator02.txt @@ -1,54 +1,54 @@ Input: Z = not A < 5.0 = B > 2.0 -Output: Z A 5.0 < B 2.0 > =% NOT CvtDbl =Assign +Output: Z A 5.0 < B 2.0 > =% NOT CvtDbl Assign Input: Z% = not A% < 5 and B% > 2 or C% < 1 and D% <> 2 -Output: Z% A% 5% <% NOT B% 2% >% AND C% 1% <% D% 2% <>% AND OR =Assign% +Output: Z% A% 5% <% NOT B% 2% >% AND C% 1% <% D% 2% <>% AND OR Assign% Input: Z$=STR$(VAL("1.23")) -Output: Z$ "1.23" VAL( STR$( =Assign$ +Output: Z$ "1.23" VAL( STR$( Assign$ Input: Z$=MID$(A$+B$,(C%+5)*D%,4)+" Test" -Output: Z$ A$ B$ +$ C% 5% +% D% *% 4% MID$(3 " Test" +$ =Assign$ +Output: Z$ A$ B$ +$ C% 5% +% D% *% 4% MID$(3 " Test" +$ Assign$ Input: Z% = (a$ = "this" + "test") -Output: Z% a$ "this" "test" +$ =$')' =Assign% +Output: Z% a$ "this" "test" +$ =$')' Assign% Input: Z = A% + B -Output: Z A% B +%1 =Assign +Output: Z A% B +%1 Assign Input: Z = A + B% -Output: Z A B% +%2 =Assign +Output: Z A B% +%2 Assign Input: Z% = A% + B% -Output: Z% A% B% +% =Assign% +Output: Z% A% B% +% Assign% Input: Z = A% + B% + C -Output: Z A% B% +% C +%1 =Assign +Output: Z A% B% +% C +%1 Assign Input: Z = A% - B -Output: Z A% B -%1 =Assign +Output: Z A% B -%1 Assign Input: Z = A - B% -Output: Z A B% -%2 =Assign +Output: Z A B% -%2 Assign Input: Z% = A% - B% -Output: Z% A% B% -% =Assign% +Output: Z% A% B% -% Assign% Input: Z = A% - B% * C -Output: Z A% B% C *%1 -%1 =Assign +Output: Z A% B% C *%1 -%1 Assign Input: Z = ABS(A%) + SGN(B%) + ABS(C) * SGN(D) -Output: Z A% ABS(% B% SGN(% +% C ABS( D SGN( * +%1 =Assign +Output: Z A% ABS(% B% SGN(% +% C ABS( D SGN( * +%1 Assign Input: Z = ABS(-A%) + SGN(-B%) + ABS(-C) * SGN(-D) -Output: Z A% -U% ABS(% B% -U% SGN(% +% C -U ABS( D -U SGN( * +%1 =Assign +Output: Z A% -U% ABS(% B% -U% SGN(% +% C -U ABS( D -U SGN( * +%1 Assign Input: Z$ = STR$(A) + STR$(A%) -Output: Z$ A STR$( A% STR$(% +$ =Assign$ +Output: Z$ A STR$( A% STR$(% +$ Assign$ Input: Z = A% + B * C ^ D -Output: Z A% B C D ^ * +%1 =Assign +Output: Z A% B C D ^ * +%1 Assign Input: Z = A$ + B ^-- expected string expression diff --git a/test/translator03.txt b/test/translator03.txt index 39aa530..ea1d42d 100644 --- a/test/translator03.txt +++ b/test/translator03.txt @@ -1,30 +1,30 @@ Input: A% = B% + 5 -Output: A% B% 5% +% =Assign% +Output: A% B% 5% +% Assign% Input: A% = B + 5 -Output: A% B 5 + CvtInt =Assign% +Output: A% B 5 + CvtInt Assign% Input: A% = B + 5.0 -Output: A% B 5.0 + CvtInt =Assign% +Output: A% B 5.0 + CvtInt Assign% Input: A = B = C = 1.0 -Output: A B C = 1.0% =% CvtDbl =Assign +Output: A B C = 1.0% =% CvtDbl Assign Input: A, B, C = 1.0 -Output: A B C 1.0 =AssignList +Output: A B C 1.0 AssignList Input: A, B, C = 1 -Output: A B C 1 =AssignList +Output: A B C 1 AssignList Input: A%,B% = C% + D% -Output: A% B% C% D% +% =AssignList% +Output: A% B% C% D% +% AssignList% Input: A% = B% = C% + D% -Output: A% B% C% D% +% =% =Assign% +Output: A% B% C% D% +% =% Assign% Input: A$,B$,C$ = "Test" -Output: A$ B$ C$ "Test" =AssignList$ +Output: A$ B$ C$ "Test" AssignList$ Input: A$ = B$ = C$ = "Test" ^^^^^^-- expected numeric expression diff --git a/test/translator04.txt b/test/translator04.txt index bc15e99..6ef64bc 100644 --- a/test/translator04.txt +++ b/test/translator04.txt @@ -63,20 +63,20 @@ Input: LEFT$(A$,1),B$,C$ = D$ Output: A$ 1% B$ C$ D$ AssignKeep$ AssignKeep$ LEFT$(Assign Input: A$,LEFT$(B$,1) = C$ -Output: A$ B$ 1% C$ LEFT$(AssignKeep =Assign$ +Output: A$ B$ 1% C$ LEFT$(AssignKeep Assign$ Input: A$,LEFT$(B$,1),C$ = D$ -Output: A$ B$ 1% C$ D$ AssignKeep$ LEFT$(AssignKeep =Assign$ +Output: A$ B$ 1% C$ D$ AssignKeep$ LEFT$(AssignKeep Assign$ Input: A$,B$,C$ = D$ -Output: A$ B$ C$ D$ =AssignList$ +Output: A$ B$ C$ D$ AssignList$ Input: A$,B$,LEFT$(C$,1) = D$ -Output: A$ B$ C$ 1% D$ LEFT$(AssignKeep AssignKeep$ =Assign$ +Output: A$ B$ C$ 1% D$ LEFT$(AssignKeep AssignKeep$ Assign$ Input: LEFT$(A$,1),B$,RIGHT$(C$,1) = D$ Output: A$ 1% B$ C$ 1% D$ RIGHT$(AssignKeep AssignKeep$ LEFT$(Assign Input: A(int(B))=C -Output: B INT( CvtInt A( C =Assign +Output: B INT( CvtInt A( C Assign diff --git a/test/translator05.txt b/test/translator05.txt index 82ea962..9a12432 100644 --- a/test/translator05.txt +++ b/test/translator05.txt @@ -1,30 +1,30 @@ Input: LET A=0.0 -Output: A 0.0 =Assign'LET' +Output: A 0.0 Assign'LET' Input: LET A%=0 -Output: A% 0% =Assign%'LET' +Output: A% 0% Assign%'LET' Input: LET A$="" -Output: A$ "" =Assign$'LET' +Output: A$ "" Assign$'LET' Input: LET A=B=C=0.0 -Output: A B C = 0.0% =% CvtDbl =Assign'LET' +Output: A B C = 0.0% =% CvtDbl Assign'LET' Input: LET A,B,C=0.0 -Output: A B C 0.0 =AssignList'LET' +Output: A B C 0.0 AssignList'LET' Input: LET A%=B%=C%=0 -Output: A% B% C% =% 0% =% =Assign%'LET' +Output: A% B% C% =% 0% =% Assign%'LET' Input: LET A%,B%,C%=0 -Output: A% B% C% 0% =AssignList%'LET' +Output: A% B% C% 0% AssignList%'LET' Input: LET A$=B$=C$="" ^^-- expected numeric expression Input: LET A$,B$,C$="" -Output: A$ B$ C$ "" =AssignList$'LET' +Output: A$ B$ C$ "" AssignList$'LET' Input: LET LEFT$(A$,1) = B$ Output: A$ 1% B$ LEFT$(Assign'LET' @@ -36,7 +36,7 @@ Input: LET LEFT$(A$,1),RIGHT$(B$,1) = C$ Output: A$ 1% B$ 1% C$ RIGHT$(AssignKeep LEFT$(Assign'LET' Input: LET A$,LEFT$(B$,1) = C$ -Output: A$ B$ 1% C$ LEFT$(AssignKeep =Assign$'LET' +Output: A$ B$ 1% C$ LEFT$(AssignKeep Assign$'LET' Input: LET LET A=0 ^^^-- expected item for assignment diff --git a/test/translator07.txt b/test/translator07.txt index 5c339be..25e49f8 100644 --- a/test/translator07.txt +++ b/test/translator07.txt @@ -315,7 +315,7 @@ Input: MID$(A$+B$, ^-- expected comma Input: A(INT(B+C))=4 -Output: B C + INT( CvtInt A( 4 =Assign +Output: B C + INT( CvtInt A( 4 Assign Input: MID$(A$,LEFT$(B$,1) B$ 1% LEFT$( C$ <$ D$ MID$(Assign2 diff --git a/test/translator08.txt b/test/translator08.txt index e16699a..947b4a5 100644 --- a/test/translator08.txt +++ b/test/translator08.txt @@ -15,7 +15,7 @@ Input: Z = A <> B$ ^^-- expected numeric expression Input: Z = A <> B$ < C$ -Output: Z A B$ C$ <$ <>%2 CvtDbl =Assign +Output: Z A B$ C$ <$ <>%2 CvtDbl Assign Input: Z = A + B$ + C$ ^^-- expected numeric expression @@ -30,13 +30,13 @@ Input: Z = A < B$ + C% ^^-- expected string expression Input: Z = A <> B$ + C$ < D$ -Output: Z A B$ C$ +$ D$ <$ <>%2 CvtDbl =Assign +Output: Z A B$ C$ +$ D$ <$ <>%2 CvtDbl Assign Input: Z = A + B$ + C$ < D$ ^^-- expected numeric expression Input: Z = A + (B$ + C$ < D$) -Output: Z A B$ C$ +$ D$ <$ +%2 =Assign +Output: Z A B$ C$ +$ D$ <$ +%2 Assign Input: Z$ = A$ + B$ + C% ^^-- expected string expression @@ -51,13 +51,13 @@ Input: A$=RIGHT$(B,2) = C$ ^-- expected string expression Input: Z=MID$(A$,2) < "B" -Output: Z A$ 2% MID$(2 "B" <$ CvtDbl =Assign +Output: Z A$ 2% MID$(2 "B" <$ CvtDbl Assign Input: Z=MID$(A$,2) = B$ -Output: Z A$ 2% MID$(2 B$ =$ CvtDbl =Assign +Output: Z A$ 2% MID$(2 B$ =$ CvtDbl Assign Input: Z(INT(A+B))=C -Output: A B + INT( CvtInt Z( C =Assign +Output: A B + INT( CvtInt Z( C Assign Input: Z(A$)=C ^^-- expected numeric expression @@ -66,16 +66,16 @@ Input: Z(A)=Y(A$) ^^-- expected numeric expression Input: Z(A),Y(A)=X(A) -Output: A CvtInt Z( A CvtInt Y( A CvtInt X( =AssignList +Output: A CvtInt Z( A CvtInt Y( A CvtInt X( AssignList Input: Z(A,Y(B))=X(A) -Output: A CvtInt B CvtInt Y( CvtInt Z( A CvtInt X( =Assign +Output: A CvtInt B CvtInt Y( CvtInt Z( A CvtInt X( Assign Input: Z%(A%),Y%(A%)=X%(A%) -Output: A% Z%( A% Y%( A% X%( =AssignList% +Output: A% Z%( A% Y%( A% X%( AssignList% Input: Z$(A%),Y$(A%)=X$(A%) -Output: A% Z$( A% Y$( A% X$( =AssignList$ +Output: A% Z$( A% Y$( A% X$( AssignList$ Input: TAB(10)=A ^^^^-- expected command or item for assignment @@ -135,37 +135,37 @@ Input: MID$(+A$,4)=B$ ^-- expected string variable Input: FNA=B -Output: FNA B =Assign +Output: FNA B Assign Input: FNA(I)=B ^-- expected equal or comma for assignment Input: LET FNA=B -Output: FNA B =Assign'LET' +Output: FNA B Assign'LET' Input: LET FNA(I)=B ^-- expected equal or comma for assignment Input: C,FNA=B -Output: C FNA B =AssignList +Output: C FNA B AssignList Input: C,FNA(I)=B ^-- expected equal or comma for assignment Input: LET C,FNA=B -Output: C FNA B =AssignList'LET' +Output: C FNA B AssignList'LET' Input: LET C,FNA(I)=B ^-- expected equal or comma for assignment Input: C,FNA,D=B -Output: C FNA D B =AssignList +Output: C FNA D B AssignList Input: C,FNA(I),D=B ^-- expected equal or comma for assignment Input: LET C,FNA,D=B -Output: C FNA D B =AssignList'LET' +Output: C FNA D B AssignList'LET' Input: LET C,FNA(I),D=B ^-- expected equal or comma for assignment diff --git a/test/translator11.txt b/test/translator11.txt index a92bef4..ff6c689 100644 --- a/test/translator11.txt +++ b/test/translator11.txt @@ -1,93 +1,93 @@ Input: Z$ = A$ + B$ -Output: Z$ A$ B$ +$ =Assign$ +Output: Z$ A$ B$ +$ Assign$ Input: Z$ = REPEAT$(A$,4) + B$ -Output: Z$ A$ 4% REPEAT$( B$ +$ =Assign$ +Output: Z$ A$ 4% REPEAT$( B$ +$ Assign$ Input: Z$ = A$ + REPEAT$(B$+C$,3) -Output: Z$ A$ B$ C$ +$ 3% REPEAT$( +$ =Assign$ +Output: Z$ A$ B$ C$ +$ 3% REPEAT$( +$ Assign$ Input: Z$ = STR$(A) + LEFT$(B$+C$,5) -Output: Z$ A STR$( B$ C$ +$ 5% LEFT$( +$ =Assign$ +Output: Z$ A STR$( B$ C$ +$ 5% LEFT$( +$ Assign$ Input: Z% = A$ = B$ -Output: Z% A$ B$ =$ =Assign% +Output: Z% A$ B$ =$ Assign% Input: Z% = A$ + B$ = C$ -Output: Z% A$ B$ +$ C$ =$ =Assign% +Output: Z% A$ B$ +$ C$ =$ Assign% Input: Z% = A$ = B$ + C$ -Output: Z% A$ B$ C$ +$ =$ =Assign% +Output: Z% A$ B$ C$ +$ =$ Assign% Input: Z% = A$ + B$ = C$ + D$ -Output: Z% A$ B$ +$ C$ D$ +$ =$ =Assign% +Output: Z% A$ B$ +$ C$ D$ +$ =$ Assign% Input: Z% = A$ < B$ -Output: Z% A$ B$ <$ =Assign% +Output: Z% A$ B$ <$ Assign% Input: Z% = A$ + B$ < C$ -Output: Z% A$ B$ +$ C$ <$ =Assign% +Output: Z% A$ B$ +$ C$ <$ Assign% Input: Z% = A$ < B$ + C$ -Output: Z% A$ B$ C$ +$ <$ =Assign% +Output: Z% A$ B$ C$ +$ <$ Assign% Input: Z% = A$ + B$ < C$ + D$ -Output: Z% A$ B$ +$ C$ D$ +$ <$ =Assign% +Output: Z% A$ B$ +$ C$ D$ +$ <$ Assign% Input: Z% = A$ <= B$ -Output: Z% A$ B$ <=$ =Assign% +Output: Z% A$ B$ <=$ Assign% Input: Z% = A$ + B$ <= C$ -Output: Z% A$ B$ +$ C$ <=$ =Assign% +Output: Z% A$ B$ +$ C$ <=$ Assign% Input: Z% = A$ <= B$ + C$ -Output: Z% A$ B$ C$ +$ <=$ =Assign% +Output: Z% A$ B$ C$ +$ <=$ Assign% Input: Z% = A$ + B$ <= C$ + D$ -Output: Z% A$ B$ +$ C$ D$ +$ <=$ =Assign% +Output: Z% A$ B$ +$ C$ D$ +$ <=$ Assign% Input: Z% = A$ > B$ -Output: Z% A$ B$ >$ =Assign% +Output: Z% A$ B$ >$ Assign% Input: Z% = A$ + B$ > C$ -Output: Z% A$ B$ +$ C$ >$ =Assign% +Output: Z% A$ B$ +$ C$ >$ Assign% Input: Z% = A$ > B$ + C$ -Output: Z% A$ B$ C$ +$ >$ =Assign% +Output: Z% A$ B$ C$ +$ >$ Assign% Input: Z% = A$ + B$ > C$ + D$ -Output: Z% A$ B$ +$ C$ D$ +$ >$ =Assign% +Output: Z% A$ B$ +$ C$ D$ +$ >$ Assign% Input: Z% = A$ <= B$ -Output: Z% A$ B$ <=$ =Assign% +Output: Z% A$ B$ <=$ Assign% Input: Z% = A$ + B$ <= C$ -Output: Z% A$ B$ +$ C$ <=$ =Assign% +Output: Z% A$ B$ +$ C$ <=$ Assign% Input: Z% = A$ <= B$ + C$ -Output: Z% A$ B$ C$ +$ <=$ =Assign% +Output: Z% A$ B$ C$ +$ <=$ Assign% Input: Z% = A$ + B$ <= C$ + D$ -Output: Z% A$ B$ +$ C$ D$ +$ <=$ =Assign% +Output: Z% A$ B$ +$ C$ D$ +$ <=$ Assign% Input: Z% = A$ <> B$ -Output: Z% A$ B$ <>$ =Assign% +Output: Z% A$ B$ <>$ Assign% Input: Z% = A$ + B$ <> C$ -Output: Z% A$ B$ +$ C$ <>$ =Assign% +Output: Z% A$ B$ +$ C$ <>$ Assign% Input: Z% = A$ <> B$ + C$ -Output: Z% A$ B$ C$ +$ <>$ =Assign% +Output: Z% A$ B$ C$ +$ <>$ Assign% Input: Z% = A$ + B$ <> C$ + D$ -Output: Z% A$ B$ +$ C$ D$ +$ <>$ =Assign% +Output: Z% A$ B$ +$ C$ D$ +$ <>$ Assign% Input: Z$ = A$ + B$ -Output: Z$ A$ B$ +$ =Assign$ +Output: Z$ A$ B$ +$ Assign$ Input: Z$,Y$ = A$ + B$ -Output: Z$ Y$ A$ B$ +$ =AssignList$ +Output: Z$ Y$ A$ B$ +$ AssignList$ Input: LEFT$(Z$,1) = A$ + B$ Output: Z$ 1% A$ B$ +$ LEFT$(Assign @@ -96,40 +96,40 @@ Input: LEFT$(Z$,1),Y$,RIGHT$(X$,1) = A$ + B$ Output: Z$ 1% Y$ X$ 1% A$ B$ +$ RIGHT$(AssignKeep AssignKeep$ LEFT$(Assign Input: Z% = ASC(A$) + ASC(B$+C$) -Output: Z% A$ ASC( B$ C$ +$ ASC( +% =Assign% +Output: Z% A$ ASC( B$ C$ +$ ASC( +% Assign% Input: Z% = ASC(A$,4) + ASC(B$+C$,4) -Output: Z% A$ 4% ASC(2 B$ C$ +$ 4% ASC(2 +% =Assign% +Output: Z% A$ 4% ASC(2 B$ C$ +$ 4% ASC(2 +% Assign% Input: Z% = INSTR(A$,B$) -Output: Z% A$ B$ INSTR(2 =Assign% +Output: Z% A$ B$ INSTR(2 Assign% Input: Z% = INSTR(A$+B$,C$) -Output: Z% A$ B$ +$ C$ INSTR(2 =Assign% +Output: Z% A$ B$ +$ C$ INSTR(2 Assign% Input: Z% = INSTR(A$,B$+C$) -Output: Z% A$ B$ C$ +$ INSTR(2 =Assign% +Output: Z% A$ B$ C$ +$ INSTR(2 Assign% Input: Z% = INSTR(A$+B$,C$+D$) -Output: Z% A$ B$ +$ C$ D$ +$ INSTR(2 =Assign% +Output: Z% A$ B$ +$ C$ D$ +$ INSTR(2 Assign% Input: Z% = INSTR(A$,B$,4) -Output: Z% A$ B$ 4% INSTR(3 =Assign% +Output: Z% A$ B$ 4% INSTR(3 Assign% Input: Z% = INSTR(A$+B$,C$,4) -Output: Z% A$ B$ +$ C$ 4% INSTR(3 =Assign% +Output: Z% A$ B$ +$ C$ 4% INSTR(3 Assign% Input: Z% = INSTR(A$,B$+C$,4) -Output: Z% A$ B$ C$ +$ 4% INSTR(3 =Assign% +Output: Z% A$ B$ C$ +$ 4% INSTR(3 Assign% Input: Z% = INSTR(A$+B$,C$+D$,4) -Output: Z% A$ B$ +$ C$ D$ +$ 4% INSTR(3 =Assign% +Output: Z% A$ B$ +$ C$ D$ +$ 4% INSTR(3 Assign% Input: Z% = LEN(A$) + LEN(B$+C$) -Output: Z% A$ LEN( B$ C$ +$ LEN( +% =Assign% +Output: Z% A$ LEN( B$ C$ +$ LEN( +% Assign% Input: Z = VAL(A$) + VAL(B$+C$) -Output: Z A$ VAL( B$ C$ +$ VAL( + =Assign +Output: Z A$ VAL( B$ C$ +$ VAL( + Assign Input: PRINT A$;B$+C$ Output: A$ PrintStr B$ C$ +$ PrintStr PRINT diff --git a/test/translator13.txt b/test/translator13.txt index 2425fd1..8e1449f 100644 --- a/test/translator13.txt +++ b/test/translator13.txt @@ -1,61 +1,61 @@ Input: A=---B -Output: A B -U -U -U =Assign +Output: A B -U -U -U Assign Input: A=-1.0 -Output: A -1.0 =Assign +Output: A -1.0 Assign Input: A%=--1 -Output: A% -1% -U% =Assign% +Output: A% -1% -U% Assign% Input: A=B-1.5 -Output: A B 1.5 - =Assign +Output: A B 1.5 - Assign Input: A=B+-1.5 -Output: A B -1.5 + =Assign +Output: A B -1.5 + Assign Input: A=B+--1.5 -Output: A B -1.5 -U + =Assign +Output: A B -1.5 -U + Assign Input: PRINT-1;--1;---1;- 1; Output: -1% PrintInt -1% -U% PrintInt -1% -U% -U% PrintInt 1% -U% PrintInt ; Input: A=- 1.0 + -.001 + -0.12 -Output: A 1.0 -U -.001 + -0.12 + =Assign +Output: A 1.0 -U -.001 + -0.12 + Assign Input: A%=-1 + - 2 -Output: A% -1% 2% -U% +% =Assign% +Output: A% -1% 2% -U% +% Assign% Input: A=-1.2E-23 + -1.2e+23 + -1.2e23 -Output: A -1.2E-23 -1.2e+23 + -1.2e23 + =Assign +Output: A -1.2E-23 -1.2e+23 + -1.2e23 + Assign Input: A=- 1.2E-23 + - 1.2e+23 + - 1.2e23 -Output: A 1.2E-23 -U 1.2e+23 -U + 1.2e23 -U + =Assign +Output: A 1.2E-23 -U 1.2e+23 -U + 1.2e23 -U + Assign Input: A% = NOT -B% -Output: A% B% -U% NOT =Assign% +Output: A% B% -U% NOT Assign% Input: A% = NOT -2147483648 -Output: A% -2147483648% NOT =Assign% +Output: A% -2147483648% NOT Assign% Input: A% = - NOT 123 -Output: A% 123% NOT -U% =Assign% +Output: A% 123% NOT -U% Assign% Input: A% = -2147483649 ^^^^^^^^^^^-- expected valid integer constant Input: A = B^-C + B*-C -Output: A B C -U ^ B C -U * + =Assign +Output: A B C -U ^ B C -U * + Assign Input: A = -B^C + -B^-C -Output: A B C ^ -U B C -U ^ -U + =Assign +Output: A B C ^ -U B C -U ^ -U + Assign Input: A = -B*C + -B*-C -Output: A B -U C * B -U C -U * + =Assign +Output: A B -U C * B -U C -U * + Assign Input: A = (-B^NOT C) + -B*NOT C -Output: A B C CvtInt NOT ^* -U')' B -U C CvtInt NOT *%2 + =Assign +Output: A B C CvtInt NOT ^* -U')' B -U C CvtInt NOT *%2 + Assign Input: A = -B^NOT C + -B*NOT C -Output: A B C B -U C CvtInt NOT *%2 + CvtInt NOT ^* -U =Assign +Output: A B C B -U C CvtInt NOT *%2 + CvtInt NOT ^* -U Assign diff --git a/test/translator15.txt b/test/translator15.txt index 63b5509..13329b1 100644 --- a/test/translator15.txt +++ b/test/translator15.txt @@ -24,13 +24,13 @@ Input: 'operator form of REM at beginning of line Output: '|operator form of REM at beginning of line| Input: A=3'assign A -Output: A 3 =Assign '|assign A| +Output: A 3 Assign '|assign A| Input: A=3 'assign A -Output: A 3 =Assign '|assign A| +Output: A 3 Assign '|assign A| Input: A=3 ' assign A -Output: A 3 =Assign '| assign A| +Output: A 3 Assign '| assign A| Input: PRINT A 'output value Output: A PrintDbl PRINT '|output value| diff --git a/test/translator16.txt b/test/translator16.txt index 9316feb..39fc266 100644 --- a/test/translator16.txt +++ b/test/translator16.txt @@ -1,6 +1,6 @@ Input: A=SQR(17):PRINT A -Output: A 17 SQR( =Assign':' A PrintDbl PRINT +Output: A 17 SQR( Assign':' A PrintDbl PRINT Input: PRINT A:PRINT B Output: A PrintDbl PRINT':' B PrintDbl PRINT @@ -12,10 +12,10 @@ Input: INPUT A:PRINT A Output: InputParse InputBegin A InputAssign INPUT':' A PrintDbl PRINT Input: A,B,C=5.0:INPUT D -Output: A B C 5.0 =AssignList':' InputParse InputBegin D InputAssign INPUT +Output: A B C 5.0 AssignList':' InputParse InputBegin D InputAssign INPUT Input: A$,LEFT$(B$,1),MID$(C$,2,3)="A":PRINT A$ -Output: A$ B$ 1% C$ 2% 3% "A" MID$(AssignKeep3 LEFT$(AssignKeep =Assign$':' A$ PrintStr PRINT +Output: A$ B$ 1% C$ 2% 3% "A" MID$(AssignKeep3 LEFT$(AssignKeep Assign$':' A$ PrintStr PRINT Input: INPUT PROMPT "Number",A:PRINT A Output: "Number" InputParse InputBeginStr'Question' A InputAssign INPUT-PROMPT':' A PrintDbl PRINT @@ -36,7 +36,7 @@ Input: PRINT A:'output A:test Output: A PrintDbl PRINT':' '|output A:test| Input: INPUT A;:R=SQR(A):PRINT"Sqrt(";A;")=";R -Output: InputParse InputBegin A InputAssign INPUT'Keep:' R A SQR( =Assign':' "Sqrt(" PrintStr A PrintDbl ")=" PrintStr R PrintDbl PRINT +Output: InputParse InputBegin A InputAssign INPUT'Keep:' R A SQR( Assign':' "Sqrt(" PrintStr A PrintDbl ")=" PrintStr R PrintDbl PRINT Input: : ^-- expected command or item for assignment diff --git a/test/translator17.txt b/test/translator17.txt index d597102..222542a 100644 --- a/test/translator17.txt +++ b/test/translator17.txt @@ -1,175 +1,175 @@ Input: A=4+B -Output: A 4 B + =Assign +Output: A 4 B + Assign Input: A=4.0+B -Output: A 4.0 B + =Assign +Output: A 4.0 B + Assign Input: A=4e40+B -Output: A 4e40 B + =Assign +Output: A 4e40 B + Assign Input: A=B+4 -Output: A B 4 + =Assign +Output: A B 4 + Assign Input: A=B+4.0 -Output: A B 4.0 + =Assign +Output: A B 4.0 + Assign Input: A=B+4e40 -Output: A B 4e40 + =Assign +Output: A B 4e40 + Assign Input: A=B%+4e40 -Output: A B% 4e40 +%1 =Assign +Output: A B% 4e40 +%1 Assign Input: A%=4+B% -Output: A% 4% B% +% =Assign% +Output: A% 4% B% +% Assign% Input: A%=4.0+B% -Output: A% 4.0% B% +% =Assign% +Output: A% 4.0% B% +% Assign% Input: A%=4e40+B% -Output: A% 4e40 B% +%2 CvtInt =Assign% +Output: A% 4e40 B% +%2 CvtInt Assign% Input: A%=B%+4 -Output: A% B% 4% +% =Assign% +Output: A% B% 4% +% Assign% Input: A%=B%+4.0 -Output: A% B% 4.0% +% =Assign% +Output: A% B% 4.0% +% Assign% Input: A%=B%+4e40 -Output: A% B% 4e40 +%1 CvtInt =Assign% +Output: A% B% 4e40 +%1 CvtInt Assign% Input: A$="4"+B$ -Output: A$ "4" B$ +$ =Assign$ +Output: A$ "4" B$ +$ Assign$ Input: A$=B$+"4" -Output: A$ B$ "4" +$ =Assign$ +Output: A$ B$ "4" +$ Assign$ Input: A%=4\B -Output: A% 4 B \ =Assign% +Output: A% 4 B \ Assign% Input: A%=4.0\B -Output: A% 4.0 B \ =Assign% +Output: A% 4.0 B \ Assign% Input: A%=4e40\B -Output: A% 4e40 B \ =Assign% +Output: A% 4e40 B \ Assign% Input: A%=B\4 -Output: A% B 4 \ =Assign% +Output: A% B 4 \ Assign% Input: A%=B\4.0 -Output: A% B 4.0 \ =Assign% +Output: A% B 4.0 \ Assign% Input: A%=B\4e40 -Output: A% B 4e40 \ =Assign% +Output: A% B 4e40 \ Assign% Input: A%=4 AND B% -Output: A% 4% B% AND =Assign% +Output: A% 4% B% AND Assign% Input: A%=4.0 AND B% -Output: A% 4.0% B% AND =Assign% +Output: A% 4.0% B% AND Assign% Input: A%=4e40 AND B% ^^^^-- expected valid integer constant Input: A%=B% AND 4 -Output: A% B% 4% AND =Assign% +Output: A% B% 4% AND Assign% Input: A%=B% AND 4.0 -Output: A% B% 4.0% AND =Assign% +Output: A% B% 4.0% AND Assign% Input: A%=B% AND 4e40 ^^^^-- expected valid integer constant Input: A=- 4 -Output: A 4% -U% CvtDbl =Assign +Output: A 4% -U% CvtDbl Assign Input: A=- 4.0 -Output: A 4.0 -U =Assign +Output: A 4.0 -U Assign Input: A=- 4e40 -Output: A 4e40 -U =Assign +Output: A 4e40 -U Assign Input: A%=- 4 -Output: A% 4% -U% =Assign% +Output: A% 4% -U% Assign% Input: A%=- 4.0 -Output: A% 4.0 -U CvtInt =Assign% +Output: A% 4.0 -U CvtInt Assign% Input: A%=- 4e40 -Output: A% 4e40 -U CvtInt =Assign% +Output: A% 4e40 -U CvtInt Assign% Input: A%=NOT 4 -Output: A% 4% NOT =Assign% +Output: A% 4% NOT Assign% Input: A%=NOT 4.0 -Output: A% 4.0% NOT =Assign% +Output: A% 4.0% NOT Assign% Input: A%=NOT 4e40 ^^^^-- expected valid integer constant Input: A=ABS(4) -Output: A 4% ABS(% CvtDbl =Assign +Output: A 4% ABS(% CvtDbl Assign Input: A=ABS(4.0) -Output: A 4.0 ABS( =Assign +Output: A 4.0 ABS( Assign Input: A=ABS(4e40) -Output: A 4e40 ABS( =Assign +Output: A 4e40 ABS( Assign Input: A$=STR$(4) -Output: A$ 4% STR$(% =Assign$ +Output: A$ 4% STR$(% Assign$ Input: A$=STR$(4.0) -Output: A$ 4.0 STR$( =Assign$ +Output: A$ 4.0 STR$( Assign$ Input: A$=STR$(4e40) -Output: A$ 4e40 STR$( =Assign$ +Output: A$ 4e40 STR$( Assign$ Input: A$=CHR$(4) -Output: A$ 4% CHR$( =Assign$ +Output: A$ 4% CHR$( Assign$ Input: A$=CHR$(4.0) -Output: A$ 4.0% CHR$( =Assign$ +Output: A$ 4.0% CHR$( Assign$ Input: A$=CHR$(4e40) ^^^^-- expected valid integer constant Input: A=4 -Output: A 4 =Assign +Output: A 4 Assign Input: A=4.0 -Output: A 4.0 =Assign +Output: A 4.0 Assign Input: A=4e40 -Output: A 4e40 =Assign +Output: A 4e40 Assign Input: A$="4" -Output: A$ "4" =Assign$ +Output: A$ "4" Assign$ Input: A%=4 -Output: A% 4% =Assign% +Output: A% 4% Assign% Input: A%=4.0 -Output: A% 4.0% =Assign% +Output: A% 4.0% Assign% Input: A%=4e40 ^^^^-- expected valid integer constant Input: A=4^B -Output: A 4 B ^ =Assign +Output: A 4 B ^ Assign Input: A=4.0^B -Output: A 4.0 B ^ =Assign +Output: A 4.0 B ^ Assign Input: A=4e40^B -Output: A 4e40 B ^ =Assign +Output: A 4e40 B ^ Assign Input: A=B^4 -Output: A B 4% ^* =Assign +Output: A B 4% ^* Assign Input: A=B^4.0 -Output: A B 4.0 ^ =Assign +Output: A B 4.0 ^ Assign Input: A=B^4e40 -Output: A B 4e40 ^ =Assign +Output: A B 4e40 ^ Assign