嘉法则 2023-12-02 17:50 采纳率: 25%
浏览 5

编译原理中缀表达式转换成三元式

问题:(编译原理)将中缀表达式转换成三元式,但是一直出现这样的错误,不知道应该怎么改正

出现的问题是这样的:

img

具体是在这一行的这句话:

img

完整代码如下:

package llll;

import java.util.*;

public class InfixToTernary {
    public static int precedence(char ch) {
        switch (ch) {
            case '+':
            case '-':
                return 1;
            case '*':
            case '/':
                return 2;
            case '^':
                return 3;
        }
        return -1;
    }

    public static String infixToTernary(String expression) {
        String result = "";
        Stack<Character> stack = new Stack<>();
        int count = 1;
        for (int i = 0; i < expression.length(); i++) {
            char ch = expression.charAt(i);
            if (Character.isLetterOrDigit(ch)) {
                result += ch;
            } else if (ch == '(') {
                stack.push(ch);
            } else if (ch == ')') {
                while (!stack.isEmpty() && stack.peek() != '(') {
                    result += stack.pop();
                }
                if (!stack.isEmpty() && stack.peek() != '(') {
                    return "Invalid Expression";
                } else {
                    stack.pop();
                }
            } else {
                while (!stack.isEmpty() && precedence(ch) <= precedence(stack.peek())) {
                    char op = stack.pop();
                    result += "t" + count + " = " + stack.pop() + " " + op + " " + stack.pop() + "\n";
                    stack.push((char) ('t' + count));
                    count++;
                }
                stack.push(ch);
            }
        }
        while (!stack.isEmpty()) {
            char op = stack.pop();
            result += "t" + count + " = " + stack.pop() + " " + op + " " + stack.pop() + "\n";
            stack.push((char) ('t' + count));
            count++;
        }
        return result;
    }

    public static void main(String[] args) {
        String s="3+5*6";
        System.out.println(infixToTernary(s));
    }
}
  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-02 20:05
    关注

    【以下回答由 GPT 生成】

    根据给出的代码和问题描述,可以看出代码在第42行没有完成。代码卡在了这里,所以问题是出现在这一行。错误原因是语法错误,代码没有完整的结束,需要加上合适的结尾。

    为了修复这个错误,可以将缺少的代码补充完整。根据代码逻辑,可以将<spa删除并用}来结束while循环。修改后的代码如下:

    while (!stack.isEmpty() && precedence(ch) <= precedence(stack.peek())) {
        result += stack.pop();
    }
    

    完整的修复方案如下:

    package llll;
    
    import java.util.*;
    
    public class InfixToTernary {
        public static int precedence(char ch) {
            switch (ch) {
                case '+':
                case '-':
                    return 1;
                case '*':
                case '/':
                    return 2;
                case '^':
                    return 3;
            }
            return -1;
        }
    
        public static String infixToTernary(String expression) {
            String result = "";
            Stack<Character> stack = new Stack<>();
            int count = 1;
            for (int i = 0; i < expression.length(); i++) {
                char ch = expression.charAt(i);
                if (Character.isLetterOrDigit(ch)) {
                    result += ch;
                } else if (ch == '(') {
                    stack.push(ch);
                } else if (ch == ')') {
                    while (!stack.isEmpty() && stack.peek() != '(') {
                        result += stack.pop();
                    }
                    if (!stack.isEmpty() && stack.peek() != '(') {
                        return "Invalid Expression";
                    } else {
                        stack.pop();
                    }
                } else {
                    while (!stack.isEmpty() && precedence(ch) <= precedence(stack.peek())) {
                        result += stack.pop();
                    }
                    stack.push(ch);
                }
            }
            while (!stack.isEmpty()) {
                if (stack.peek() == '(') {
                    return "Invalid Expression";
                }
                result += stack.pop();
            }
            return result;
        }
    
        public static void main(String[] args) {
            String expression = "a+b*c-d/e";
            System.out.println(infixToTernary(expression));
        }
    }
    

    此修复方案完整地解决了代码中遗漏的语法错误。请将代码复制到您的开发环境中,运行该代码是否能够成功转换中缀表达式为三元式。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 12月2日

悬赏问题

  • ¥200 基于同花顺supermind的量化策略脚本编辑
  • ¥20 Html备忘录页面制作
  • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
  • ¥20 数学建模来解决我这个问题
  • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?