c++构造出相关预测分析程序,并返回一个符号串的分析结果,如果是一个合法的符号串输出正确标志并返回 True,否则输出错误标志并返回 False。
时间: 2023-07-16 09:16:09 浏览: 96
设计,编制并调试一个词法分析程序
5星 · 资源好评率100%
可以使用语法分析器来实现该预测分析程序。下面是一个简单的 C++ 代码示例,用于分析输入的符号串是否是一个合法的表达式:
```c++
#include <iostream>
#include <stack>
#include <cstring>
using namespace std;
// 判断字符是否是操作符
bool isOperator(char c) {
if (c == '+' || c == '-' || c == '*' || c == '/') {
return true;
}
return false;
}
// 判断字符是否是数字
bool isNumber(char c) {
if (c >= '0' && c <= '9') {
return true;
}
return false;
}
// 判断符号串是否合法
bool isValidExpression(char* str) {
stack<char> s;
int len = strlen(str);
for (int i = 0; i < len; i++) {
char c = str[i];
if (c == '(') {
s.push(c);
} else if (c == ')') {
// 如果栈为空或者栈顶元素不是左括号,则表达式非法
if (s.empty() || s.top() != '(') {
return false;
}
s.pop();
} else if (isOperator(c)) {
// 如果栈为空或者栈顶元素不是左括号,则表达式非法
if (s.empty() || s.top() != '(') {
return false;
}
s.push(c);
} else if (isNumber(c)) {
// 如果是数字,则忽略
} else {
// 如果是其它字符,则表达式非法
return false;
}
}
// 如果栈不为空,则表达式非法
if (!s.empty()) {
return false;
}
return true;
}
int main() {
char str[] = "(1+2)*3-(4/2)";
bool result = isValidExpression(str);
if (result) {
cout << "正确" << endl;
} else {
cout << "错误" << endl;
}
return 0;
}
```
该代码首先定义了两个函数 `isOperator` 和 `isNumber`,用于判断字符是否是操作符和数字。然后使用一个栈来存储左括号和操作符,遍历整个符号串,根据不同的字符进行不同的操作。最后如果栈为空,则表示符号串合法,否则表示不合法。
阅读全文