CMD窗口正在发布
C:\ Users \ Dell \ Desktop \ PROGRA~1> node revers~2.js
events.js:160
throw er; // Unhandled 'error' event
^
Error: ENOENT: no such file or directory, open
'C:\Users\Dell\Desktop\PROGRA~1\Input_File.txt'
at Error (native)
我不知道它可能引用了什么,但我相信它可能是我用来运行我的代码的Node.js
软件的一部分。
感谢您提供的任何帮助。对不起,如果这个问题看起来很基本或有点自我解释,我就无法看到这个问题。
也可能是我没有适当的代码来执行此任务。
Input_File.txt
有
15 12 2 + -4 * + 3 -
中的数据。我不知道这是否会有任何帮助。这是我试图让程序解决的反向波兰语功能。
'use strict' ;
var ArrayStack = require ( './ArrayStack' ) ;
const fs = require ( 'fs' ) ;
const readline = require ( 'readline' ) ;
var ArrayStack2 = new ArrayStack () ;
var readStream = fs.createReadStream ( 'Input_File.txt', 'utf8' ) ;
var rl = readline.createInterface ( {input:readStream} ) ;
rl.on ('line', function (inputLine)
{
console.log(inputLine) ;
var tokens = inputline.split( ' ' ) ;
for ( var i = 0 ; i < tokens.length ; i ++ )
{
const token = tokens[i] ;
var tokenCategory = 'operand' ;
if ( token === '+' || token === '-' || token === '/' || token === '*' )
{
tokenCategory = 'operator' ;
var B = ArrayStack2.pop() ;
var A = ArrayStack2.pop() ;
if ( token === '+' )
{
var answer = A + B ;
ArrayStack2.push(answer) ;
}
elseif ( token === '-' )
{
var answer = A - B ;
ArrayStack2.push(answer) ;
}
elseif ( token === '/' )
{
var answer = A / B ;
ArrayStack2.push(answer) ;
}
elseif ( token === '*' )
{
var answer = A * B ;
ArrayStack2.push(answer) ;
}//end of sub conditional statement
}//end of if statement
else
{
ArrayStack2.push(token) ;
console.log (ArrayStack) ;
}
}//end of for loop
});//end of function
rl.on ( 'close', function () {
console.log('File now closed.');
}) ; // end function
这是用于存储数据然后解决问题的ArrayStack类。
'use strict' ;
var EmptyError = require( './EmptyError' ) ;
class ArrayStack
{
constructor ( )
{
// An empty array added as a "private" property of the stack.
// Objects pushed onto the stack will be stored in this array.
this._data = new Array() ;
} // end constructor
isEmpty ( )
{
return ( this._data.length === 0 ) ;
} // end isEmpty
push ( toPush )
{
this._data.push( toPush ) ;
return this ;
} // end push
pop ( )
{
if ( this.isEmpty() )
throw new EmptyError("Can't pop from an empty stack!") ;
return this._data.pop( ) ;
} // end pop
top ( )
{
if ( this.isEmpty() )
throw new EmptyError('An empty stack has no top!') ;
return this._data [ this._data.length - 1 ] ;
} // end top
len ( )
{
return this._data.length ;
} // end len
} // end ArrayStack class
module.exports = ArrayStack ;
这是用于引用ArrayStack类的Empty Error类。
'use strict' ;
class EmptyError extends Error
{
constructor ( message )
{
// Ask superclass' constructor to initialize this object,
// including creating its "message" property ...
super ( message ) ;
} // end constructor
} // end EmptyError class
module.exports = EmptyError ;
答案 0 :(得分:0)
'operator' === '-'
等是字符串比较,绝不是operator
与-
,/
,*
虽然没有经过测试,但我认为您已与token
进行比较,但未与运营商进行比较
if (token === '+' || token === '-' || token === '/' || token === '*'); {
//Rest of code
if (token === '+') {
} else if (token === '-') {
// rest of code
}
// rest of code
}
答案 1 :(得分:0)
你错过了基本的if-else括号。正如@brk所说,你正在比较两个字符串 &#39;操作&#39;和&#39; +&#39;,&#39; - &#39;等等 这是更新的代码。检查这是否适合您。
'use strict' ;
var ArrayStack = require ( './ArrayStack' ) ;
const fs = require ( 'fs' ) ;
const readline = require ( 'readline' ) ;
new ArrayStack () ;
var readStream = fs.createReadStream ( 'Input_File.txt', 'utf8' ) ;
var rl = readline.createInterface ( {input:readStream} ) ;
rl.on ('line', function (inputLine)
{
console.log(inputLine) ;
var tokens = inputline.split( ' ' ) ;
for ( var i = 0 ; i < tokens.length ; i ++ )
{
const token = tokens[i] ;
var tokenCategory = 'operand' ;
if ( token === '+' || token === '-' || token === '/' || token === '*' )
{
tokenCategory = 'operator' ;
var B = ArrayStack.pop() ;
var A = ArrayStack.pop() ;
if ( token === '+' )
{
var answer = A + B ;
ArrayStack.push(answer) ;
//the error shows here where CMD recognizes the else as an 'unexpected token'
//have I missed something in setting up my nesting properly?
}
elseif ( token === '-' )
{
var answer = A - B ;
ArrayStack.push(answer) ;
}
elseif ( token === '/' )
{
var answer = A / B ;
ArrayStack.push(answer) ;
}
elseif ( token === '*' )
{
var answer = A * B ;
ArrayStack.push(answer) ;
}//end of sub conditional statement
}//end of if statement
else
{
ArrayStack.push(token) ;
console.log (ArrayStack) ;
}
}//end of for loop
});//end of function
rl.on ( 'close', function () {
console.log('File now closed.');
}) ; // end function
我不知道你的文本文件是如何工作的。但是我已经更新了你的代码,几乎没有变化。你可以尝试这个。
var ArrayStack = require ( './ArrayStack' ) ;
const fs = require ( 'fs' ) ;
const readline = require ( 'readline' ) ;
var myStack
var readStream = fs.createReadStream ( 'Input_File.txt', 'utf8' ) ;
var rl = readline.createInterface ( {input:readStream} ) ;
rl.on ('line', function (inputLine)
{
console.log(inputLine) ;
var tokens = inputLine.split( ' ' ) ;
ArrayStack.init(tokens, function (err, data) {
if (err) {
console.error('Error received');
}
else {
myStack = data;
console.log('pushed data '+data.first());
}
});
for ( var i = 0 ; i < tokens.length ; i ++ )
{
const token = tokens[i] ;
var tokenCategory = 'operand' ;
if ( token === '+' || token === '-' || token === '/' || token === '*' )
{
tokenCategory = 'operator' ;
var B = myStack.pop();
var A = myStack.pop();
if ( token === '+' )
{
var answer = A + B ;
myStack.push(answer) ;
}
elseif ( token === '-' )
{
var answer = A - B ;
myStack.push(answer) ;
}
elseif ( token === '/' )
{
var answer = A / B ;
myStack.push(answer) ;
}
elseif ( token === '*' )
{
var answer = A * B ;
myStack.push(answer) ;
}//end of sub conditional statement
}//end of if statement
else
{
myStack.push(token) ;
console.log (myStack) ;
}
}//end of for loop
});//end of function
rl.on ( 'close', function () {
console.log('File now closed.');
}) ; // end function
答案 2 :(得分:0)
else
是“意外令牌”的原因是因为您未{
/ }
/正确使用if
和else if
else
结构。
正确的语法是:
if (condition) {
statement1
} else if (condition) {
statement2
} else {
statement3
}
...如果要使用单个语句,则大括号{
和}
是可选的,但如果您使用 希望块包含多个语句。
在您的代码中,if
和else if
块中的每一个都包含两行,因此您必须使用{
和}
包围它们。
另外,在以下一行:
if ( token === '+' || token === '-' || token === '/' || token === '*' ) ;
...末尾的分号表示如果if
条件为真,则执行 no 语句,即使您使用{
开始下一行。
如果你修复了所有的大括号,你最终会得到这样的结果:
function (inputLine) {
console.log(inputLine);
var tokens = inputline.split(' ');
for (var i = 0; i < tokens.length; i++) {
const token = tokens[i];
var tokenCategory = 'operand';
if (token === '+' || token === '-' || token === '/' || token === '*') {
tokenCategory = 'operator';
var B = ArrayStack.pop();
var A = ArrayStack.pop();
if (token === '+') {
var answer = A + B;
ArrayStack.push(answer);
} else if (token === '-') {
var answer = A - B;
ArrayStack.push(answer);
} else if (token === '/') {
var answer = A / B;
ArrayStack.push(answer);
} else if (token === '*') {
var answer = A * B;
ArrayStack.push(answer);
} //end of sub conditional statement
} //end of if statement
else {
ArrayStack.push(token);
console.log(ArrayStack);
}
} //end of for loop
} //end of function
(注意如果您愿意,可以将花括号放在自己的行上。)
同样在比较字符串'operator'
的位置,你可能想要变量token
。