基本计算器输入验证算法
Basic calculator input validation algorithm
我正在尝试通过能够验证输入来改进我的 Java 计算器。
我的计算器可以处理 +、-、*、/、^ 和 ofc ()。
我正在尝试找出验证输入有效的最佳方法。
有效输入如下所示:
10 + 2 + 2 * ( 5 + 6 )
无效输入如下所示:
10 $ 2 + 2 * ( 5 + 6 )
或
5 + 6 + (7 * )
你明白了。
Dijkstra 的 shunting-yard algorithm 是一种用于检查输入语法和可选地评估表达式的简单标准算法,它专门设计用于评估此类表达式。也可以选择性地修改它以支持语法检查。
希望对您有所帮助!
您正在寻找一种解析算法。我推荐以下两种方法之一:正则表达式或标记化。
Regex 将是最精简的方法,java 有大量的 Regex 库。您可以形成一个正则表达式 (Regex) 来匹配有效的计算器输入。在我的头脑中,我无法为您提供良好的正则表达式,但我相信 Google 搜索至少可以为您提供一个开始。 Regex 模式可以验证计算器输入,实质上是为您执行解析算法。
使用字符串分词器(假设是字符串输入)对输入进行分词需要解析算法。本质上,您将通过算法形成语法并检查标记序列以匹配语法。例如:
Num -> operator|paren -> num -> ......等等
我建议使用堆栈来跟踪括号。每次遇到 paren 时,要么压入或弹出一个占位符 onto/from 堆栈。输入末尾的空堆栈表示偶数括号。左括号:推送占位符;右括号:弹出占位符。
我正在尝试通过能够验证输入来改进我的 Java 计算器。 我的计算器可以处理 +、-、*、/、^ 和 ofc ()。 我正在尝试找出验证输入有效的最佳方法。
有效输入如下所示:
10 + 2 + 2 * ( 5 + 6 )
无效输入如下所示:
10 $ 2 + 2 * ( 5 + 6 )
或
5 + 6 + (7 * )
你明白了。
Dijkstra 的 shunting-yard algorithm 是一种用于检查输入语法和可选地评估表达式的简单标准算法,它专门设计用于评估此类表达式。也可以选择性地修改它以支持语法检查。
希望对您有所帮助!
您正在寻找一种解析算法。我推荐以下两种方法之一:正则表达式或标记化。
Regex 将是最精简的方法,java 有大量的 Regex 库。您可以形成一个正则表达式 (Regex) 来匹配有效的计算器输入。在我的头脑中,我无法为您提供良好的正则表达式,但我相信 Google 搜索至少可以为您提供一个开始。 Regex 模式可以验证计算器输入,实质上是为您执行解析算法。
使用字符串分词器(假设是字符串输入)对输入进行分词需要解析算法。本质上,您将通过算法形成语法并检查标记序列以匹配语法。例如:
Num -> operator|paren -> num -> ......等等
我建议使用堆栈来跟踪括号。每次遇到 paren 时,要么压入或弹出一个占位符 onto/from 堆栈。输入末尾的空堆栈表示偶数括号。左括号:推送占位符;右括号:弹出占位符。