В этом случае: У меня есть список токенов, которые являются действительными токенами на языке программирования TI. Я пытаюсь написать программу, которая будет компилировать текст, который содержит действительные токены в программу TI-83/84, которая состоит из полностью шестнадцатеричных данных. Я знаю, как записывать данные в файл и как получить данные из файла. Мне нужно написать программу для поиска по программе и определения действительных токенов и сохранения порядка программы. Я уже думал о том, чтобы взять токен в качестве ключевого слова и искать в нем текст, но маркер, который был выбран первым, не всегда будет первым в тексте, поэтому порядок будет потерян.Java - Разборные жетоны TI-84 в шестнадцатеричном коде
Я написал свой собственный маркерного объекта, и я использую следующие переменные в моем парсер:
- ArrayList метки - ArrayList объектов лексем (все действительные жетоны TI-BASIC)
- DataInputStream дис - также текстовый файл
- Строка данных - текстовые данные, которые программа извлекает из файла, используя метод LoadData (не проблема, так что не важно, как она работает)
- DataOutputStream дос - .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;
}
}
Я надеюсь, что кто-то сможет помочь мне с этим. Если вам нужна дополнительная информация, например, какой-либо другой код, это не будет проблемой, проект будет открытым исходным кодом. Заранее спасибо за любую помощь по этому поводу.
Можете ли вы показать фрагмент того, как могут выглядеть входные данные, и каков будет результат для этого набора данных? Надеюсь, потребуется лишь несколько строк для каждого. –
Входные данные хранятся в файле .txt в кодировке UTF-8 и выглядеть следующим образом: : TI-84 Prog "Hello World" -> Str1 Disp Str1: Стоп И окончательный вывод должен храниться в файл .8xp, который должен содержать следующие необработанные шестнадцатеричные данные (не включая заголовок): 3E 54 49 71 38 34 29 50 BBC2 BBBF BBB6 3F 2A 48 BBB4 BBBC BBBC BBBF 29 57 BBBF BBC2 BBBC BBB3 2A 04 AA00 3F DE AA00 3E D9 [:] = 3E [ "] = 2A [-] = 71 [] = 29 [->] = [DISP] = DE [Стоп] = D9 [Str1] = предопределенная переменная с токеновым значением AA00 прописные буквы совпадают с обычной кодировкой ASCII строчные буквы являются двухбайтовыми токенами, начинающимися с BBB0 –
user1260475
Прошу прощения за плохой формат информации выше, комментарии не позволят новые линии. Должна быть новая строка после «Prog» и после первой «Str1» – user1260475