Java - Разбор токенов TI-84 в шестнадцатеричный код - PullRequest
0 голосов
/ 12 марта 2012

Вот проблема: У меня есть список токенов, которые являются действительными токенами на языке программирования TI. Я пытаюсь написать программу, которая будет компилировать текст, содержащий действительные токены, в программу TI-83/84, которая состоит из полностью шестнадцатеричных данных. Я знаю, как записать данные в файл и как получить данные из файла. Мне нужно написать программу для поиска в программе, определения допустимых токенов и возможности поддерживать порядок программы. Я уже думал о том, чтобы взять токен в качестве ключевого слова и выполнить поиск по такому тексту, но первый выбранный токен не всегда будет первым в тексте, поэтому порядок будет потерян.

Я написал свой собственный объект Token, и я использую следующие переменные в моем парсере:

  • Токены ArrayList - объекты ArrayList Token (все действительные токены TI-BASIC)
  • DataInputStream dis - также текстовый файл
  • Строковые данные - текстовые данные, которые программа извлекает из файла с помощью метода loadData (не проблема, поэтому не важно, как это работает)
  • DataOutputStream dos - файл .8xp для записи в

Класс токенов:

public class Token {

  private String tokenText;
  int[] hexValue;
  boolean isTwoByte;

  /**
   * The default constructor.
   * Assigns empty values to all instance variables.
   */
  public Token() {
    tokenText = "";
    hexValue = new int[0];
    isTwoByte = false;
  }

  /**
   * Constructs a Token with <tt>text</tt> text and an empty int[] for <tt>hexValue</tt>
   * @param text the text to be assigned to the Token
   */
  public Token(String text) {
    tokenText = text;
    hexValue = new int[0];
    isTwoByte = false;
  }

  /**
   * Constructs a Token with an empty String for <tt>text</tt> and <tt>hexValue</tt> value
   * This is a one-byte Token
   * @param value the value to be assigned to the Token
   */
  public Token(int value) {
    tokenText = "";
    hexValue = new int[1];
    hexValue[0] = value;
    isTwoByte = false;
  }

  /**
   * Constructs a Token with an empty String for <tt>text</tt> and <tt>hexValue></tt> v1v2
   * This is a two-byte Token
   * @param v1 the first byte of the two-byte value that will be assigned to the Token
   * @param v2 the second byte of the two-byte value
   */
  public Token(int v1, int v2) {
    tokenText = "";
    hexValue = new int[2];
    hexValue[0] = v1; hexValue[1] = v2;
    isTwoByte = true;        
  }

  /**
   * Constructs a Token with <tt>text</tt> text and <tt>hexValue</tt> value
   * This is a one-byte Token
   * @param text the text to be assigned to the Token
   * @param value the value to be assigned to the one-byte Token
   */
  public Token(String text, int value) {
    tokenText = text;
    hexValue = new int[1];
    hexValue[0] = value;
    isTwoByte = false;
  }

  /**
   * Constructs a Token with tokenText <tt>text</tt> text and <tt>hexValue</tt> v1v2
   * This is a two-byte Token
   * @param text the text to be assigned to the Token
   * @param v1 the first byte of the two-byte value that will be assigned to the Token
   * @param v2 the second byte of the two-byte value
   */
  public Token(String text, int v1, int v2) {
    tokenText = text;
    hexValue = new int[2];
    hexValue[0] = v1; hexValue[1] = v2;
    isTwoByte = true;
  }

  /**
   * Returns the text that is assigned to the particular Token
   * @return the text that is assigned to the particular Token
   */
  public String getText() {
    return tokenText;
  }

  /**
   * Returns the byte value of the Token
   * @return the byte value of the Token
   */
  public int[] getValue() {
    return hexValue;
  }

  /**
   * Returns <tt>true</tt> if the Token is a two-byte Token, and <tt>false</tt> otherwise
   * @return <tt>true</tt> if the Token is a two-byte Token, and <tt>false</tt> otherwise
   */
  public boolean isTwoByte() {
    return isTwoByte;
  }

  /**
   * Sets the tokenText text of the Token to the String passed it.
   * @param text the new text to be assigned to the Token
   */
  public void setText(String text) {
    tokenText = text;
  }

  /**
   * Sets the byte value of the Token to the integer passed it. This sets the isTwoByte variable to <tt>false</tt>.
   * @param value the new byte value to be assigned to the Token
   */
  public void setValue(int value) {
    hexValue = new int[1];
    hexValue[0] = value;
    isTwoByte =  false;
  }

  /**
   * Sets the byte value of the Token to the integers passed it. This sets the isTwoByte variable to <tt>true</tt>.
   * @param v1 value of the first byte of the two-byte Token
   * @param v2 value of the second byte
   */
  public void setValue(int v1, int v2) {
    hexValue = new int[2];
    hexValue[0] = v1; hexValue[1] = v2;
    isTwoByte = true;
  }
}

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

1 Ответ

0 голосов
/ 12 марта 2012

Я не использовал его сам, но класс java.io.StreamTokenizer делает то, что вам нужно?Или просто StringTokenizer, если вы можете прочитать исходный файл целиком.

Поскольку вы просматриваете файл по порядку, вам не нужно беспокоиться о сохранении порядка.

...