Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package HW3;
- import java.util.*;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.IOException;
- import java.io.StreamTokenizer;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.StringTokenizer;
- public class first {
- private static final String FILE1 = "src/G1.txt";
- private static final String FILE2 = "src/G2.txt";
- private static ArrayList<Rule> rules = new ArrayList<Rule>();
- public static void main(String[] args) throws FileNotFoundException {
- File file = new File(FILE1);
- Scanner in = new Scanner(file);
- int cur = 0;
- Symbol tempTerm = new Symbol("", false);
- ArrayList<Symbol> tempOrder = new ArrayList<Symbol>();
- while(in.hasNextLine()) {
- String nextLine = in.nextLine();
- if(nextLine.equals("$")) {
- rules.add(new Rule(tempTerm, tempOrder));
- cur = 0;
- } else if(cur == 0) {
- tempOrder = new ArrayList<Symbol>();
- tempTerm = new Symbol(nextLine, isTerminalSymbol(nextLine));
- cur++;
- } else {
- tempOrder.add(new Symbol(nextLine, isTerminalSymbol(nextLine)));
- }
- }
- System.out.println(rules.get(2).getNTS());
- for(int i = 0; i < rules.size(); i++) {
- System.out.print(rules.get(i).getNTS() + " = {" );
- findFirst(rules.get(i));
- System.out.print("}");
- System.out.println(" ");
- }
- }
- public static void findFirst(Rule rule) {
- ArrayList<Symbol> ord = rule.getOrder();
- Symbol firstSymbol = ord.get(0);
- if(firstSymbol.isTerminal()) {
- System.out.print(" " + firstSymbol.getTerm() + " ");
- } else {
- for(int i = 0; i < rules.size(); i++) {
- if(firstSymbol.getTerm().equalsIgnoreCase(rules.get(i).getNTS())) {
- if(rule.getNTS().equalsIgnoreCase(rules.get(i).getNTS())) {
- continue;
- }
- findFirst(rules.get(i));
- }
- }
- }
- }
- public static boolean isTerminalSymbol(String s) {
- return !Character.isUpperCase(s.toCharArray()[0]);
- }
- }
- class Rule {
- Symbol term;
- ArrayList<Symbol> order;
- public Rule(Symbol term, ArrayList<Symbol> order) {
- this.term = term;
- this.order = order;
- }
- public String getNTS() {
- return term.getTerm();
- }
- public ArrayList<Symbol> getOrder() {
- return order;
- }
- }
- class Symbol {
- String term;
- boolean terminal;
- public Symbol(String term, boolean terminal) {
- this.term = term;
- this.terminal = terminal;
- }
- public boolean isTerminal() {
- return terminal;
- }
- public String getTerm() {
- return term;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement