#java #compiler-construction
#java #построение компилятора
Вопрос:
Итак, я создаю этот компилятор, который компилирует текстовый файл в машинный код для ОС для чтения с SD-карты. код будет выглядеть примерно так: (Ra text_to_store), который хранит текст в строковом слоте a. большая часть этого, кажется, выполнима с
mystring=mystring.replace("String ","R");
mystring=mystring.replace("=","");
mystring=mystring.replace(";","");
//cannot replace " with nothing, how do I get around this?
поскольку это превращает строку a=text_t_ store; в правильный код.
но, конечно, не все можно сделать с этим. например, мне нужно избавиться от комментариев (//commented stuff ), которые не выполнимы с помощью .replace, наряду с несколькими другими вещами. вероятно, это что-то простое, но я не могу его найти!
ps. можете ли вы также предоставить ссылку / помощь с форматированием текста? например, int var; должен быть преобразован в число для слота оперативной памяти. заранее спасибо!
Ответ №1:
Используйте mystring.replaceAll, который использует регулярное выражение, например
mystring = mystring.replaceAll("//.*$","");
замена от // до конца строки ничем
Комментарии:
1. Вероятно, стоит добавить примечание о том, что это может испортить код. например, исходная строка типа
String url = "http://example.com/...";
(другими словами, наивная замена строки заводит вас только до сих пор, в какой-то момент вам понадобится правильный лексер …)2. Это правда, это все испортило бы. Возможно, проверка, чтобы увидеть, было ли это в начале строки или нет. Я предполагаю, что это теоретически, так как вы все равно никогда не захотите создавать компилятор с string.replace
3. Я не буду использовать URL-адреса, но это работает! Спасибо! теперь, чтобы выяснить, как делать переменные…
Ответ №2:
вы можете разместить все это в 1 строке с помощью replaceAll и регулярного выражения
mystring=mystring.replaceAll("(?:.|\s)*String ([\w] )=(.*?);(?:.|\s)*","R$1 $2");
Комментарии:
1. 4 недопустимых escape-символа в соответствии с netbeans, но он выполняется. однако это вообще не влияет на текст.
2. хм … все еще не влияет на текст.
3. у вас есть несколько строк в вашей mystring, думаю, я это исправил
4. по-прежнему ничего. код: { static String stuff=»String stuff=string-ness;n//Я комментарий»; public static void main(строка[] аргументы) { String mystring=stuff.replaceAll(«Строка ([\w] )=([\w \ s] );[ ]*(?://[\ d\D]*)?»,»R $ 1 $2″); System.out.println(mystring); } } }
5. в вашей строке есть ‘-‘, а регулярное выражение, которое я написал, искало только буквы и пробелы, поскольку это то, что у вас было в качестве примера, добавлена поддержка чего угодно сейчас