public static void main(String[] args) { Scanner scan = new Scanner(System.in); int num=scan.nextInt(); String[] rules=new String[num]; for(int i=0;i<num;i++) rules[i]=scan.next(); String strin = scan.next(); ArrayList<String> product = new ArrayList<String>(); for(int i=0; i<rules.length; i++) { char[] reg = rules[i].toCharArray(); for(int j=0; j<reg.length; j++) { if(reg[j] >= 'A' && reg[j]<= 'Z'); else { if(!product.contains(reg[j]+"")) product.add(reg[j]+""); } } } Main m = new Main(); ArrayList<String> rule = m.getMostLeft(rules, strin); rule.add(0,rules[0]); String left = new String(); for(int i=0; i<rule.size()-1; i++) { int flag = 0; String right = new String(); if(i == 0) { System.out.print(rules[0].charAt(0)+"=>"); for(int j=3; j<rules[0].length(); j++) left += rules[0].charAt(j); System.out.print(left); } System.out.print("=>"); for(int j = 0; j < left.length(); j++) { if(left.charAt(j) == rule.get(i+1).charAt(0) && flag == 0){ if(rule.get(i+1).charAt(3) == '@') { flag = 1; continue; } for(int z = 3; z < rule.get(i+1).length(); z++) right += rule.get(i+1).charAt(z); flag = 1; } else right += left.charAt(j); } left = right; System.out.print(right); } }解释一下
时间: 2024-02-14 11:33:54 浏览: 87
import java.io.*; public class FirstPart{ public static void main(String[] args) throws Exception{ System.out.print("The input Fahrenheit is "); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int f = Integer.parseInt(br.re
5星 · 资源好评率100%
这是一个Java程序的main方法,它接受用户输入的一些规则和一个字符串,然后根据这些规则将字符串推导到最左侧。具体来说,程序首先从控制台读取一个整数num,表示规则的数量,然后读取num个字符串,表示所有的规则。接着,程序读取一个字符串strin,表示要进行推导的输入串。
程序接下来的操作是将所有规则中出现的终结符号收集起来,存储在一个ArrayList<String>对象product中。然后程序调用Main类的getMostLeft方法,找到最左侧的推导规则,并存储在一个ArrayList<String>对象rule中。最后,程序根据规则和输入串进行推导,将推导过程输出到控制台上。
具体来说,程序首先将起始符号输出,然后将起始符号的产生式中的非终结符号保存到left变量中。接着,程序逐步推导输入串,每次将推导结果输出到控制台上。在推导过程中,程序遍历left中的每个字符,如果遇到了一个与当前推导规则匹配的非终结符号,就将其展开为相应的产生式,并将结果保存到right变量中。最后将left变量更新为right变量,继续下一轮推导过程。程序输出的结果是一个完整的推导序列,从起始符号到最终推导结果。
阅读全文