我正在尝试使用Java创建计算器。我知道我将需要创建一个解析器以将用户的数据从字符串转换为双精度和字符。
我想知道通过创建解析器,用户输入的数据(例如7/5)是否已经被分离,或者我是否需要以某种方式分离数据。
我还想知道运算符将如何影响解析器,以及是否有一种方法可以分别检索它。我曾尝试使用input.next();来检索操作数,但我认为是因为我正在使用解析器,所以它可能无法正常工作。
这是我的代码:
String rawUserInt;
String method;
double answer;
Scanner input = new Scanner(System.in);
System.out.println("Please input the equation you would like to solve");
double userInt1 = Double.parseDouble(rawUserInt);
method = input.next();
double userInt2 = Double.parseDouble(rawUserInt);
答案 0 :(得分:0)
通常。形式语言(如表达式)的处理分为词法分析和解析。词法分析器会将输入拆分为标记,并且还会忽略不相关的字符,例如空格。它还确定令牌的类型。在您的示例中,这将导致double(7), operator(/), double(5)
。
下一步是由解析器完成,解析器根据形式语言的语法将标记组装成抽象语法树(AST)。在示例中,这将给出
"/"
/ \
7 5
然后使用树结构轻松评估表达式。
在像您这样的简单情况下,您可能不需要所有图层作为显式组件。例如,可以在词法分析之后直接评估表达式,而无需先构建AST。