2012-03-02 10 views
1

Я пытаюсь реализовать стек в Java, я хочу, чтобы иметь возможность возвращать строку и столбец открытой скобки своего спутника, который возвратил ошибку. Например:LinkedList LinkedLists в java?

public static foo() { 
    System.out.println ("foo" 
} 

это должно производить ошибку при компиляции, что я хочу, чтобы вернуть некоторые ошибки в форме:

«Ошибка: строки 2 столбца 23„(“найдено, и ожидаемый") 'в строке 2 столбца 29, но вместо этого найдена' '.

это возможно со связаннымLIst из связанныхList? Или другой инструмент будет лучше для этого приложения. Я бы хотел, чтобы методы push(), pop() и peek() сохраняли постоянное поведение.

Спасибо

+0

Подсказка: http://stackoverflow.com/questions/2605032/using-eval-in-java – alfasin

+1

@alfasin Это не имеет никакого отношения к эквиваленту 'eval'. Вопрос конкретно задает вопрос об использовании стека для его реализации, не полагаясь на внешний механизм JavaScript. –

+0

@AdamMihalcin извините - это было не то, что я понял. он сказал, что пытается реализовать стек, чтобы обнаружить закрывающие скобки. но он не сказал, что ДОЛЖЕН использовать стек, чтобы сделать это! – alfasin

ответ

2

Используйте встроенный Stack объекта. Не нужно изобретать колесо и создавать собственную версию стандартного класса библиотеки.

Как относится к ошибкам печати, для несогласованных скобок, я бы рекомендовал создать класс

public final class Brace { 
    private final char openBrace; 
    private final char closeBrace; 
    private final int row; 
    private final int col; 

    public Brace(char openBrace, int row, int col) { 
     this.openBrace = openBrace; 
     this.row = row; 
     this.col = col; 

     switch (openBrace) { 
      case '(': 
       closeBrace = ')'; 
       break; 
      case '{': 
       closeBrace = '}'; 
       break; 
      case '[': 
       closeBrace = ']'; 
       break; 
      default: 
       throw new IllegalArgumentException("Unsupported opening brace"); 
     } 
    } 

    public boolean isClosingBrace(char ch) { 
     return closeBrace == ch; 
    } 
} 

и хранение Stack<Brace> в вашей программе. Затем, когда вы перемещаетесь по файлу, вы можете нажимать открывающие фигурные скобки на стек, и, когда вы достигаете каждой закрывающей скобки, убедитесь, что это закрывающая скобка для скобки в верхней части стека. Если это не так, вы уже сохранили строку и столбец для печати в сообщении об ошибке.

+0

Большое спасибо, простое решение прямо перед моим лицом, и я над этим усложнил ... да! – Kristopher

Смежные вопросы