Черновик: Пошаговое создание форта на java
Участников: 2
Страница 1 из 2
Страница 1 из 2 • 1, 2
Черновик: Пошаговое создание форта на java
Тут буду выкладывать промежуточные результаты и исходники, от начала и до практического
навигационного приложения для андроид, с внутренним скриптовым языком на форте.
Проект открытый, каждый может вносить коррективы.
Итак.
Самое начало
В директории, в котором будет проект создаем файл HelloWorld.java.
В ней же создаем поддиректорию forth
В forth создаем два файла STACK.java и fas.java
в STACK.java пишем
В HelloWorld.java
скачать можно https://anonfile.com/A2S1T8U0m2/hello_tar
Компилировать
javac HelloWorld.java
запустить
java HelloWorld
Программа выбирает слова,
если число, кладет на стек
иначе - пытается найти в словаре
если находит то
если начинается с i то пишет исполняется
иначе пишет компилируется
если не находит то добавляет в словарь, создавая цепной список
также после ввода каждой строки, находит в словаре пустое слово "" и выводит сообщение
навигационного приложения для андроид, с внутренним скриптовым языком на форте.
Проект открытый, каждый может вносить коррективы.
Итак.
Самое начало
В директории, в котором будет проект создаем файл HelloWorld.java.
В ней же создаем поддиректорию forth
В forth создаем два файла STACK.java и fas.java
в STACK.java пишем
- Код:
package forth;
public class STACK {
public int [] stack = null; //
public int sp;
public void push(int v) {stack[sp++] = v; }
public int pop() {return stack[--sp];} // --sp
public int peek() { return stack[sp - 1];} // неразрушающее чтение стека
public int peek2() { return stack[sp - 2]; }
public void drop(int i) {sp -= i; }
public int getDepth() { return sp; }
- Код:
package forth;
/*
форт ассемблер
*/
import java.util.*;
import java.lang.*;
public class fas {
public static int here; // адрес переменной HERE в массиве memory
public short[] memory = new short[1000]; //выделяем память из 16 битных целых размером в 1000
public STACK ST;
- Код:
public Vector StringVector;
public Vector initVirtualMem(int i) {
Vector v = new Vector();
Integer I = new Integer(i); // тип Integer, это объектное представление типа int
v.addElement(I);
return v;
}
public int appendData(Vector v,Object obj) {
// Integer Ind = // new Integer(); Ind=
// (Integer)v.elementAt(0); // получить значение начального элемента вектора как Integer
int ind = 0; // Ind.intValue(); // преобразовать в нормальный int
if ( ind == 0) { // если равен 0, то свободных элементов нет
v.addElement(obj);// // тогда добавляем объект к вектору
ind=v.size()-1;
}
/*
else {
Integer I =( Integer)v.elementAt(ind); // иначе ind указывает на свободный элемент (СЭ)
int i = I.intValue(); //там хранится предыдущий (СЭ) который получаем
v.setElementAt(obj, ind); // Замещаем элемент вектора с номером ind объектом obj
v.setElementAt(I, 0); // в начальный элемент вектора пишем предыдущий СЭ
}
*/
return ind; // возвращаем индекс объекта в векторе
}
- Код:
public void cre0 (String s, boolean immediate) { // временная вспомогательная ф-ция. создающая упрощенную запись в словаре
short tmp = memory[here]; //получить here
memory[tmp]=memory[latest];
memory[latest]=tmp;
tmp++;
int i = s.length(); // получаем длинну строки
if (immediate) i=0-i; // если immediate , число отрицательно, (временно для простоты)
memory[tmp]= (short)i;
tmp++;
i=appendData(StringVector, s);
memory[tmp]= (short)i;
tmp++;
memory[here]=tmp; //устанавливается новое значение here
}
- Код:
public int find( String s) { // 0 - не найдено ; иначе адрес в словаре, если отрицательно то immediate
int ret=0;
boolean bool=false;
boolean immediate=false;
int tmp=memory[latest];
while (tmp != 0 && ! bool) {
int len = memory[tmp+1];
if (len<0) {immediate=true;
len=0-len;
}
int ind = memory[tmp+2]; // получаем инд в векторе
String si = (String)StringVector.elementAt(ind);
if ( s.compareTo(si)==0) {
bool = true;
if (immediate ) ind=0-ind;
ret=ind;
}
else
tmp=memory[tmp];
}//while
return ret;
} //тут find находит не cfa а индекс в векторе
- Код:
////////////////////////////////реализация WORD//////////////////////////////////////////
public static int _IN=0; // !!!!to memory
public int number(String s) { // тут возвращает 0 и на стеке число или -1
int ret = 0;
int ii;
try {ii = Integer.parseInt(s);
ST.push(ii);
} catch (Exception e) {ret=-1;}
return ret;
}
static boolean ifblank(char ch) {
boolean ret=false;
if(ch == ' ' || ch == '\n' || ch == '\t' || ch=='\r') ret = true;
return ret;
}
- Код:
static private int skipBlank(String s, int _in) {
int position;
position=_in;
boolean log=true;
while (log)
if ( (position)==s.length() ) {position= -1; log = false; } // достигнут конец потока возвращает -1
else
{
if ( ifblank( s.charAt(position)) ) position++; else log=false;
} //else
return position;
} //end
- Код:
static private int skipUntilBlank(String s, int _in) {
int position;
position=_in;
boolean log=true;
while (log)
if ( (position)==s.length() ) { log = false; } // достигнут конец
else
{
if ( ! ifblank( s.charAt(position)) ) position++; else log=false; //если не бланк
} //else
return position;
} //endfunk
- Код:
public static String WORD( String s ) {
String w = null;
int start, ends;
start=skipBlank(s, _IN);
if (start==-1) w=""; // достигнут конец потока, возвращает слово нулевой длинны
else {
ends=skipUntilBlank(s, start);
_IN=ends;
w=s.substring(start,ends);
}
return w;
}
- Код:
} //all
В HelloWorld.java
- Код:
import java.util.*;
import forth.*;
public class HelloWorld {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String test="aa";
System.out.println(" введите строку или end для выхода");
STACK ST; // стеки данных
ST=new STACK();
int[] stackarray = new int [20];
ST.stack=stackarray;
- Код:
fas as = new fas();
// memory инициировать здесь
as.ST=ST;
as.here= 2;
as. latest=3;
as. memory[as.here]=6; //взято от балды
as. memory[as.latest]=0;// записи в словари еще не создавались
Vector V=null;
V = as.initVirtualMem(0);
as.StringVector=V;
- Код:
while (test.compareTo("end")!=0) {
test=null;
test=in.nextLine();
as._IN=0;
boolean log = true;
while ( log ) {
String st;
st = as.WORD(test);
int ind = as.find(st);
- Код:
if (ind==0) {
if (as.number(st) != 0) { //если не нуль // если равно 0 то на стеки число
System.out.println("слово " +st+" не обнаружено, добавляется в словарь");
boolean b=false;
if (st!="")
if (st.charAt(0)=='i') b=true; //если 1 буква слова "i" то immediate
as.cre0(st,b);
}//if
}//if
boolean im=false;
String mes;
if (ind < 0) {im=true;ind=0-ind;
mes=" исполняется ";
System.out.println( as.StringVector.elementAt(ind) + mes);
}
else
if (ind>0) {mes= " компилируется ";
System.out.println( as.StringVector.elementAt(ind) + mes);
}
// System.out.println(" вектор = " + as.StringVector.size() )
if (st=="") log = false;
}
}//while
- Код:
int iii=ST.getDepth();
for (int k=0; k<iii; k++) System.out.println( as.ST.pop()+""); // печать стека
for (int k=0;k<39;k++) System.out.print(as.memory[k]+" "); System.out.println("# \n"); // дамп первых 40 слов памяти
as.memory[as.here]=4;
as.memory[as.latest]=0;
}//main
}//all
скачать можно https://anonfile.com/A2S1T8U0m2/hello_tar
Компилировать
javac HelloWorld.java
запустить
java HelloWorld
Программа выбирает слова,
если число, кладет на стек
иначе - пытается найти в словаре
если находит то
если начинается с i то пишет исполняется
иначе пишет компилируется
если не находит то добавляет в словарь, создавая цепной список
также после ввода каждой строки, находит в словаре пустое слово "" и выводит сообщение
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Код, реализованный на первом шаге, может быть полезен, например при отладке строковых процедур, если заменить Vector чем-нибудь более подходящим.
На втором шаге получается, что-то больше похожее на форт, и даже можно
что-нибудь посчитать.
Так же полезно для тестирования ФВМ, выявить странности поведения в зародыше.
Выкладывать исходники удобнее было бы на гитхаб, но как-то неловко выкладывать
недоделанный проект, на который гугл будет вываливать ссылки и люди будут
тратить свое время. По этому буду просто вываливать на файлообменник и
комментировать здесь изменения с прошлой версии.
Файл fas.java
Добавляем переменные
Она оставляет на стеке cfa, и 1 / -1 (immediate) или 0 0 если не найдено
Добавляется процедура exec(addr)
ВМ с адреса, который найдет команда find
Добавляем процедуру cre1
затем впечатывает содержимое массива code
добавляется строка с форт словами и параметрами opcode immediate
Файл FVM.java надо положить в папку forth
Лучше взять файл с файлообменника, ссылку на который приложу, а не копировать с форума,
так как внес в файл изменения.
Пустая ф-ция callService(int port, int y) заменяется
файл STACK.java остается без изменений
В HelloWorld.java
В секции, где инициируются стеки надо добавить инициацию стека возвратов
инициируем ФВМ
Загрузка форт слов
Определяем процедуру останова ВМ и "."
то что выполнится в callServices в FVM
Главный цикл заменяем на
Скачать
https://anonfile.com/J70299V4m5/hello1_tar
форт слова набирать большими буквами
end для выхода - маленькими.
При выходе ругнется ошибкой.
При исчерпании стека вылетает.
На втором шаге получается, что-то больше похожее на форт, и даже можно
что-нибудь посчитать.
Так же полезно для тестирования ФВМ, выявить странности поведения в зародыше.
Выкладывать исходники удобнее было бы на гитхаб, но как-то неловко выкладывать
недоделанный проект, на который гугл будет вываливать ссылки и люди будут
тратить свое время. По этому буду просто вываливать на файлообменник и
комментировать здесь изменения с прошлой версии.
Файл fas.java
Добавляем переменные
- Код:
public int exit_addr; //адрес процедуры выхода из виртуальной машины
public FVM VM; // добавление виртуальной машины
- Код:
public void find_( String s) { //поле кода n 0 - не найдено если не отрицательно то immediate
int ret=0;
boolean bool=false;
boolean immediate=false;
int tmp=memory[latest];
while (tmp != 0 && ! bool) {
int len = memory[tmp+1];
if (len<0) {immediate=true;} // если длинна слова отрицательна - immediate=true;
int ind = memory[tmp+2]; // получаем инд в векторе
String si = (String)StringVector.elementAt(ind);
if ( s.compareTo(si)==0) {
bool = true;
ret=memory[tmp+3];
}
else
tmp=memory[tmp];
}//while
ST.push(ret);
if (ret==0) ST.push(0);
else ST.push(-1);
}
Она оставляет на стеке cfa, и 1 / -1 (immediate) или 0 0 если не найдено
Добавляется процедура exec(addr)
- Код:
public void exec(int addr) {
VM.adrStack.push(exit_addr-1); // положить на стек возвратов адрес процедуры exit
VM.processImage(addr); // -1 тут особенность данной вирт машины,
// надо протестировать
}
ВМ с адреса, который найдет команда find
Добавляем процедуру cre1
- Код:
public void cre1(String s, boolean immediate, short[] code ) {
cre0(s,immediate);
short h = memory[here];
memory[h]=(short)(h+1);
h++;
//
for( int k=0; k<code.length ; k++ ) {memory[h]=code[k];h++; }
memory[here]=h;
}
затем впечатывает содержимое массива code
добавляется строка с форт словами и параметрами opcode immediate
- Код:
public String initwords =
" NOP 0 -1 LIT 1 -1 DUP 2 -1 DROP 3 -1 SWAP 4 -1 "+
" PUSH 5 -1 POP 6 -1 CALL 7 -1 JUMP 8 -1 ; 9 1 " +
" GT_JUMP 10 -1 LT_JUMP 11 -1 NE_JUMP 12 -1 EQ_JUMP 13 -1 " +
" FETCH 14 -1 STORE 15 -1 " +
" + 16 -1 - 17 -1 * 18 -1 DIVMOD 19 -1 " +
" AND 20 -1 OR 21 -1 XOR 22 -1 SHL 23 -1 SHR 24 -1 "+
" ZERO_EXIT 25 -1 INC 26 -1 DEC 27 -1 "+
" IN 28 -1 OUT 29 -1 WAIT 30 -1 "+
" LIT32 31 -1 "+
"end_ "
;
Файл FVM.java надо положить в папку forth
Лучше взять файл с файлообменника, ссылку на который приложу, а не копировать с форума,
так как внес в файл изменения.
Пустая ф-ция callService(int port, int y) заменяется
- Код:
private void callService(int port, int y) { // вызывается во время записи в порт (out)
// зависит от реализации
if (port != 0) System.out.println("нетот порт "+ port);
else
{
switch (y) {
case 0 : _HALT=true; break; // остановка виртуальной машины
case 1 : System.out.println("stack "+stack.pop() ); _HALT=true; break; // печатать число на вершине стека "."
} //switch
}//else
}
файл STACK.java остается без изменений
В HelloWorld.java
В секции, где инициируются стеки надо добавить инициацию стека возвратов
- Код:
STACK ST,STa; // стеки данных и адресный
ST=new STACK();
STa=new STACK();
int[] stackarray = new int [20];
int[] adrstackarray = new int [20];
int[] ports = new int[20];
ST.stack=stackarray;
STa.stack=adrstackarray;
инициируем ФВМ
- Код:
FVM VM=new FVM();
VM.stack=as.ST;
VM.adrStack=STa;
VM.image=as.memory;
VM.ports=ports;
as.VM=VM;
VM.as=as;
Загрузка форт слов
- Код:
////////////////////////////////// загрузка форт слов
String ini = as.initwords;
as._IN=0;
boolean enddo=false; //для выхода из цикла
do {
String name = as.WORD(ini);
// System.out.print(name);
if (name.compareTo("end_") != 0) {
String codeString = as.WORD(ini);
String immString = as.WORD(ini);
int code=0;
try { code=Integer.parseInt(codeString);} catch (Exception e){ System.out.print("huynia code");}
int imm=0;
try {imm=Integer.parseInt(immString);} catch (Exception e){ System.out.print("huynia imme");}
boolean bool = imm>0;
short[] arrays={0,9};// "nop" ";" {0,1,0,1,0,29};// последовательность " nop lit 0 lit 0 out " для exit
arrays[0]=(short)code; // нулевой элемент заменяется кодом операции
as.cre1(name,bool,arrays);
// System.out.print(name+code + " " +imm);
}
else enddo = true;
} while (! enddo) ;
Определяем процедуру останова ВМ и "."
то что выполнится в callServices в FVM
- Код:
short[] araa={1,1,1,0,29}; //lit 1 lit 0 , out определение точки
as.cre1(".",false,araa);
short[] araaex={1,0,1,0,29}; // lit 0 lit 0 out -- exit
as.cre1("EXIT",false,araaex);
as.find_("EXIT"); // найти свежеопределенный exit
ST.pop(); //
as.exit_addr=ST.pop(); //сохранить точску входа в exit,чтобы положить на стек возвратов
Главный цикл заменяем на
- Код:
test=null;test="aa";
while (test.compareTo("end")!=0) {
test=null;
test=in.nextLine();
as._IN=0;
boolean log = true;
while ( log ) {
String st = as.WORD(test);
if (st=="") log = false;
else {
as.find_(st);
int n = ST.pop();
int val = ST.pop();
if (n != 0 )
as.exec( val );
/*
if (as.memory[as.state]==0) as.exec( val );
else
as.comp(val);
*/
else
if (as.number(st) != 0) //не число , иначе число на стеке
{ // test=null; test="end";
System.out.println("ошибка " + st + " не существует");
log=false;
}
}//else
}//while
}//while
Скачать
https://anonfile.com/J70299V4m5/hello1_tar
форт слова набирать большими буквами
end для выхода - маленькими.
При выходе ругнется ошибкой.
При исчерпании стека вылетает.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
шаг 1
На свежий взгляд - то, что написано выше, плохо читаемо.
Начну сначала.
Введение к статье напишу позже.
Шаг 1: hello World.
Тут все просто
https://pastebin.com/gUwmgCFu
Читает строки и выделяет слова, ограниченные разделителями,
пока не наткнется на "end".
На процедуру printm в самом низу, пока не надо обращать внимание
Начну сначала.
Введение к статье напишу позже.
Шаг 1: hello World.
Тут все просто
https://pastebin.com/gUwmgCFu
Читает строки и выделяет слова, ограниченные разделителями,
пока не наткнется на "end".
На процедуру printm в самом низу, пока не надо обращать внимание
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Буду вываливать результаты подряд, а комментировать и причесывать позже.
Иначе работа будет длиться бесконечно. Если кому понадобятся промежуточные
результаты, что мало вероятно, то может задать вопрос.
шаг второй
Создаем каталог forth а в нем файл fas.java
Копируем текст
https://pastebin.com/V9i4Fk5D
Сюда переписал ф-цию world_ с первого шага.
Так же добавил хранилище строк, тут используется тип данных java.util.Vector
ранее в соседней теме комментировал.
Хранить строки можно многими способами, собственно этот шаг служит
для того, что бы протестировать реализацию хранилища строк.
Еще здесь появляется "оперативная память", размер байта которой 16 бит (short).
public short[] memory = new short[1000];
процедура cre0 создает в этой памяти структуру
link
length длинна строки
index что бы найти строку в хранилище
666 на месте будущего cfa - чтобы различать статьи визуально, при просмотре памяти dump
Файл HelloWorld.java (в каталог forth не входит)
https://pastebin.com/NEpEBG6v
тут добавляются команды
printv - для печати введеных слов
printm - для dump памяти
del <n> удаление строки с определенным номером из хранилища
(структура, созданная cre0 остается)
Иначе работа будет длиться бесконечно. Если кому понадобятся промежуточные
результаты, что мало вероятно, то может задать вопрос.
шаг второй
Создаем каталог forth а в нем файл fas.java
Копируем текст
https://pastebin.com/V9i4Fk5D
Сюда переписал ф-цию world_ с первого шага.
Так же добавил хранилище строк, тут используется тип данных java.util.Vector
ранее в соседней теме комментировал.
Хранить строки можно многими способами, собственно этот шаг служит
для того, что бы протестировать реализацию хранилища строк.
Еще здесь появляется "оперативная память", размер байта которой 16 бит (short).
public short[] memory = new short[1000];
процедура cre0 создает в этой памяти структуру
link
length длинна строки
index что бы найти строку в хранилище
666 на месте будущего cfa - чтобы различать статьи визуально, при просмотре памяти dump
Файл HelloWorld.java (в каталог forth не входит)
https://pastebin.com/NEpEBG6v
тут добавляются команды
printv - для печати введеных слов
printm - для dump памяти
del <n> удаление строки с определенным номером из хранилища
(структура, созданная cre0 остается)
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
шаг 3usesStack
тут добавляем стек и переписываем ф-ции в стековой нотации.
Так же добавляется Find.
Это может пригодится для совместного тестирования create и find
при реализации словаря.
Главный файл теперь называется usesStack.java
https://pastebin.com/2ByneN3z
file forth/fas.java
https://pastebin.com/0rAMsDv1
следует подумать о реализации удаления статей из словаря, возможно надо добавить ее сюда.
тут добавляем стек и переписываем ф-ции в стековой нотации.
Так же добавляется Find.
Это может пригодится для совместного тестирования create и find
при реализации словаря.
Главный файл теперь называется usesStack.java
https://pastebin.com/2ByneN3z
file forth/fas.java
https://pastebin.com/0rAMsDv1
следует подумать о реализации удаления статей из словаря, возможно надо добавить ее сюда.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Продолжаю вываливать черновую реализацию проекта.
Виртуальная машина.
https://pastebin.com/jQUVB8d7
Здесь, вместо последовательности адресов, принятой в форте используется
байт код , впрочем можно добавить в оператор switch что то вроде
такая виртуальная машина будет работать вполне по фортовски, если нужно.
Смысл использовать байт код вместо шитого кода - мне так нравится.
Еще, в команды такого вида, насколько я знаю, превращается программа
на любом языке, после грамматического разбора. Следовательно, если
бы гипотетически, разрабатывали компилятор с этого байт кода, в машинный
код так же тщательно, как компилятор си, то он бы вероятно был бы
такой же быстрый, как си.
Говорят, что форт намного медленней си.
http://fforum.winglion.ru/viewtopic.php?p=46895&sid=838ab76c3538ee88f16567fddd64d11b#p46895
Виртуальная машина.
https://pastebin.com/jQUVB8d7
Здесь, вместо последовательности адресов, принятой в форте используется
байт код , впрочем можно добавить в оператор switch что то вроде
- Код:
int MagicNum = 100;
switch(op) {
case VM_NOP:
break;
case VM_LIT: ip++;stack.push(image[ip]); // положить 16 битное значение на стек
break;
default:
if (op > MagicNum) ip=op;// если опкод больше некоторого числа
break; // этот число интерпретируется
}//end switch // как адрес, куда надо перейти
такая виртуальная машина будет работать вполне по фортовски, если нужно.
Смысл использовать байт код вместо шитого кода - мне так нравится.
Еще, в команды такого вида, насколько я знаю, превращается программа
на любом языке, после грамматического разбора. Следовательно, если
бы гипотетически, разрабатывали компилятор с этого байт кода, в машинный
код так же тщательно, как компилятор си, то он бы вероятно был бы
такой же быстрый, как си.
Говорят, что форт намного медленней си.
http://fforum.winglion.ru/viewtopic.php?p=46895&sid=838ab76c3538ee88f16567fddd64d11b#p46895
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Точно?vikt144 пишет:Смысл использовать байт код вместо шитого кода - мне так нравится
Тут две ошибки: 1) не "на любом", 2) грамматический разбор - не последняя фаза компилятора.vikt144 пишет:Еще, в команды такого вида, насколько я знаю, превращается программа на любом языке, после грамматического разбора.
Только, если речь не идет о тех местах, где быстродействие важно.vikt144 пишет:Говорят, что форт намного медленней си.
Извините, что влез в Ваши рассуждения (если надо, потру, или перенесу в другое место), но смысл "черновиков", обычно, в постижении теории путем практики, а не в оправдывании заранее еще не совершенных ошибок.
Gudleifr- Admin
- Сообщения : 3219
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Извините, что влез в Ваши рассуждения пишет:
Наоборот, другая точка зрения очень важна.
А по поводу байт кода - это я взял из ретрофорт, вожусь с ним уже лет 15 наверное,
лень что-то менять.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Код в основном предназначен для тестирования виртуальной машины.
Так же реализован прототип execute.
Сначала загружается текст из строковой переменной initwords
как это работает - описано выше.
Выглядит довольно невнятно, но мало вероятно, что кто то это читает,
а если читают, то могут спросить. Это черновик.
main
https://pastebin.com/XmqKMGCi
фортасcемблер
https://pastebin.com/dEWNLk1a
fvm
https://pastebin.com/tu2hSiMM
скачать
https://anonfile.com/N9l1LeQ3n7/vm_7z
Так же реализован прототип execute.
Сначала загружается текст из строковой переменной initwords
как это работает - описано выше.
Выглядит довольно невнятно, но мало вероятно, что кто то это читает,
а если читают, то могут спросить. Это черновик.
main
https://pastebin.com/XmqKMGCi
фортасcемблер
https://pastebin.com/dEWNLk1a
fvm
https://pastebin.com/tu2hSiMM
скачать
https://anonfile.com/N9l1LeQ3n7/vm_7z
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Теперь о том, что у меня вызвало трудности - разное исполнение слов,
созданных с помощью create из разных контекстов. Пока это были единственные
трудности в этой работе.
Случай, когда create вызывается в процессе интерпретации текста
1) в процессе интерпретации слова name, на стек кладется адрес поля параметров статьи name.
2) в процессе компиляции текста, где вызывается name, генерируется код, который кладет на стек
адрес поля параметров статьи name.
В этой реализации cfa=0, и генерируется код виртуальной машины lit <адрес поля параметров name>
cfa=1 в этой реализации присваивается статьям, которые являются обертками для опкодов виртуальной машины,
таких как dup + - ! @ итд.
поле параметров в этом случае состоит из двух слов и выглядит например для dup так,
opcode dup
opcode ret - опкод для возврата из подпрограммы
В процессе компиляции какой-нибудь словарной статьи, в случае ссылки на dup, просто скопирует
opcode в поле параметров новой статьи.
Слова, определенные через : (двоеточия), это вообще процедура.
Здесь для таких слов cfa=2.
Если в процессе компиляции встретится ссылка на такое слово, то будет
сгенерирован код call <адрес поля параметров >
Слова, определенные через create does> в процессе выполнения оставляют на стеке
адрес поля параметров, и выполняют код, который расположен после does>.
Здесь cfa=-<адрес кода после does> , отрицательное значение используется,
что бы различить от других случаев.
В процессе компиляции генерируется код
lit <адрес поля параметров> call <abs(cfa)>
созданных с помощью create из разных контекстов. Пока это были единственные
трудности в этой работе.
Случай, когда create вызывается в процессе интерпретации текста
- Код:
create name
1) в процессе интерпретации слова name, на стек кладется адрес поля параметров статьи name.
2) в процессе компиляции текста, где вызывается name, генерируется код, который кладет на стек
адрес поля параметров статьи name.
В этой реализации cfa=0, и генерируется код виртуальной машины lit <адрес поля параметров name>
cfa=1 в этой реализации присваивается статьям, которые являются обертками для опкодов виртуальной машины,
таких как dup + - ! @ итд.
поле параметров в этом случае состоит из двух слов и выглядит например для dup так,
opcode dup
opcode ret - опкод для возврата из подпрограммы
В процессе компиляции какой-нибудь словарной статьи, в случае ссылки на dup, просто скопирует
opcode в поле параметров новой статьи.
Слова, определенные через : (двоеточия), это вообще процедура.
Здесь для таких слов cfa=2.
Если в процессе компиляции встретится ссылка на такое слово, то будет
сгенерирован код call <адрес поля параметров >
Слова, определенные через create does> в процессе выполнения оставляют на стеке
адрес поля параметров, и выполняют код, который расположен после does>.
Здесь cfa=-<адрес кода после does> , отрицательное значение используется,
что бы различить от других случаев.
В процессе компиляции генерируется код
lit <адрес поля параметров> call <abs(cfa)>
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Т.к. у Вас просто switch, то вся эта псевдо-FORTH-обфускация совершенно избыточна. Из-за нее - и трудности.vikt144 пишет:у меня вызвало трудности - разное исполнение слов...
...
значение cfa должно интерпретироваться...
...
генерируется код виртуальной машины...
...
Gudleifr- Admin
- Сообщения : 3219
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Но такой подход имеет свои плюшки.
1) Модуль, скомпилированный в байт код, более автономен, требует только таблицы привязки адресов, своих и внешних, что похоже на целевую компиляцию.
2) Раньше у меня так и реализовывался фортоподобный язык, соответственно
мне ничего изобретать не нужно.
3) В системах, где есть возможность программировать на ассемблере,
байт код можно компилировать и оптимизировать дальше, что для меня
впрочем не актуально.
ps Надо отладить предыдущее мое сообщение и скопировать на Winglion.
Там эта тема кажется не раскрыта, как и у Баранова Ноздрунова.
1) Модуль, скомпилированный в байт код, более автономен, требует только таблицы привязки адресов, своих и внешних, что похоже на целевую компиляцию.
2) Раньше у меня так и реализовывался фортоподобный язык, соответственно
мне ничего изобретать не нужно.
3) В системах, где есть возможность программировать на ассемблере,
байт код можно компилировать и оптимизировать дальше, что для меня
впрочем не актуально.
ps Надо отладить предыдущее мое сообщение и скопировать на Winglion.
Там эта тема кажется не раскрыта, как и у Баранова Ноздрунова.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Выкладываю теперь последнюю часть проекта.
Это еще не форт, это код для тестирования компонентов форта.
Откомментирую, если кто-нибудь попросит, этот код буду переписывать.
Сейчас он выполняет все примеры из Баранова Ноздрунова, кроме
<do loop> - видимо какая-то ошибка.
forth words
Вставлю сюда
: < - 0< ;
: = - 0= ;
: > - 0> ;
: >mark here 1 allot ;
: if compile ?branch >mark ; immediate
: then >resolve ; immediate
: else compile branch >mark swap >resolve ; immediate
: <mark here ;
: begin <mark ; immediate
: until compile ?branch <resolve ; immediate
: while compile ?branch >mark ; immediate
: repeat compile branch swap <resolve >resolve ; immediate
: var create 2 allot ;
: const create , does> @ ;
var tmpregistr0
var tmpregistr1
var tmpregistr2
: over swap dup tmpregistr0 ! swap tmpregistr0 @ ;
: rot tmpregistr0 ! tmpregistr1 ! tmpregistr2 ! tmpregistr1 @ tmpregistr0 @ tmpregistr2 @ ;
: ?DUP ( A -> A,A/0 ) DUP IF DUP THEN ;
: R@ R> dup >R ;
: / /mod swap drop ;
: mod /mod drop ;
: 2+ 1+ 1+ ;
: 2- 1- 1- ;
: 2/ 2 /mod swap drop ;
: negate 0 swap - ;
: ABS ( A --->абс A ) DUP 0< IF NEGATE THEN ;
: 2dup tmpregistr0 ! tmpregistr1 ! tmpregistr1 @ tmpregistr0 @ tmpregistr1 @ tmpregistr0 @ ;
: 2drop drop drop ;
FVM
fort assembler
main
Весь проект
https://anonfile.com/ncif2aU6n0/crtDoes_7z
Сейчас займусь андроид программой, которая будет контейнером, для внедрения в нее форта.
По итогам внесу изменения в предыдущие части проекта.
Это еще не форт, это код для тестирования компонентов форта.
Откомментирую, если кто-нибудь попросит, этот код буду переписывать.
Сейчас он выполняет все примеры из Баранова Ноздрунова, кроме
<do loop> - видимо какая-то ошибка.
forth words
Вставлю сюда
: < - 0< ;
: = - 0= ;
: > - 0> ;
: >mark here 1 allot ;
: if compile ?branch >mark ; immediate
: then >resolve ; immediate
: else compile branch >mark swap >resolve ; immediate
: <mark here ;
: begin <mark ; immediate
: until compile ?branch <resolve ; immediate
: while compile ?branch >mark ; immediate
: repeat compile branch swap <resolve >resolve ; immediate
: var create 2 allot ;
: const create , does> @ ;
var tmpregistr0
var tmpregistr1
var tmpregistr2
: over swap dup tmpregistr0 ! swap tmpregistr0 @ ;
: rot tmpregistr0 ! tmpregistr1 ! tmpregistr2 ! tmpregistr1 @ tmpregistr0 @ tmpregistr2 @ ;
: ?DUP ( A -> A,A/0 ) DUP IF DUP THEN ;
: R@ R> dup >R ;
: / /mod swap drop ;
: mod /mod drop ;
: 2+ 1+ 1+ ;
: 2- 1- 1- ;
: 2/ 2 /mod swap drop ;
: negate 0 swap - ;
: ABS ( A --->абс A ) DUP 0< IF NEGATE THEN ;
: 2dup tmpregistr0 ! tmpregistr1 ! tmpregistr1 @ tmpregistr0 @ tmpregistr1 @ tmpregistr0 @ ;
: 2drop drop drop ;
FVM
fort assembler
main
Весь проект
https://anonfile.com/ncif2aU6n0/crtDoes_7z
Сейчас займусь андроид программой, которая будет контейнером, для внедрения в нее форта.
По итогам внесу изменения в предыдущие части проекта.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Дык, речь не о минусах подхода (байт-кода), а о том, что вместо того, чтобы его "просто применить" (помните, всего-то надо научиться "вызывать функцию по номеру", "упаковывать процедуры в слова, а слова - в процедуры" и "научиться забегать вперед"?), Вы все пытаетесь привязать его к несуществующей в дикой природе "виртуальной машине".vikt144 пишет:Но такой подход имеет свои плюшки.
Gudleifr- Admin
- Сообщения : 3219
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Не понял эту мысль. Есть JVM для java. Тоже стековая.
Есть parrot не помню для чего.
Есть LVM для Lua.
При этом, со своей виртуальной машиной я знаю как работать,
как вызвать ява ф-цию из FVM или наоборот. У меня в голове имеется
хоть какая-то модель, как это все будет работать в прикладной программе,
и практический опыт такой работы.
Да и задача ставится так, чтобы после получения основы проекта,
клонировать эти решения, адаптировать их к своим задачам при этом
не делая никакой творческой работы. Только рутину.
Творческая работа будет после, при написании и редактировании
скриптов, чтобы автоматизировать программы по максимому.
Есть parrot не помню для чего.
Есть LVM для Lua.
При этом, со своей виртуальной машиной я знаю как работать,
как вызвать ява ф-цию из FVM или наоборот. У меня в голове имеется
хоть какая-то модель, как это все будет работать в прикладной программе,
и практический опыт такой работы.
Да и задача ставится так, чтобы после получения основы проекта,
клонировать эти решения, адаптировать их к своим задачам при этом
не делая никакой творческой работы. Только рутину.
Творческая работа будет после, при написании и редактировании
скриптов, чтобы автоматизировать программы по максимому.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Это что, я, вообще, не понимаю, что и зачем Вы делаете. Поэтому и прошу постоянно лирику. Каков план работ? Что нужно делать с файлами, которые Вы выкладываете? Зачем это делать? Что в них нужно искать? Какие альтернативы рассматривались и почему? Каких вопросов Вы ждете?..vikt144 пишет:Не понял эту мысль.
Это все для совместимости. Стандарты для написания на разном железе совершенно разных компиляторов/интерпретаторов, понимающих примерно одинаковые языки. FORTH совместимость ни к чему, т.к. он не живет долее одного проекта. Именно поэтому все попытки его стандартизации успешно проваливаются.vikt144 пишет:Есть JVM для java... Есть parrot... Есть LVM...
Вот и опишите, пожалуйста, эту модель по-людски. Без отсылок к чужой косноязычной терминологии. Люди, которые сюда заходят, хотят, наверное, найти у Вас решения своих проблем, а не заценить, насколько Ваше решение вписывается в ожидания FORTH-бомонда.vikt144 пишет:У меня в голове имеется хоть какая-то модель, как это все будет работать в прикладной программе, и практический опыт такой работы.
Творческая работа в Вашем случае - запустить "производственный цикл скриптов", а не не создать "всепогодный интерпретатор". Не свести к "рутине", а "автоматизировать ее".vikt144 пишет:Да и задача ставится так, чтобы после получения основы проекта, клонировать эти решения, адаптировать их к своим задачам при этом не делая никакой творческой работы.
Красиво, но совершенно непонятно. Как Вы собираетесь редактировать скрипты, имея только кривейшее средство в мире - FORTH-язык, и не разобравшись, при чем тут Ведроид? Что значит "автоматизировать программы"?vikt144 пишет:Творческая работа будет после, при написании и редактировании скриптов, чтобы автоматизировать программы по максимому.
Очевидно, большая часть моих вопросов - от того, что я смотрю на Ваш проект с неправильной стороны. Так, что Вам проще будет либо завести отдельную тему-блог, описывающую Вашу проблему литературно, либо как-то оформлять Ваши вопросы и решения в независимой от Вашего проекта форме.
Gudleifr- Admin
- Сообщения : 3219
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Они предназначены для тестирования компонентов будущего форта, виртуальной машины, хранилища строк итд. А так же чтобы впоследствии, когда работа с черновиком закончится, вычитать снова и привести в более читабельное состояние.Что нужно делать с файлами, которые Вы выкладываете? пишет:
Стандарты для написания на разном железе совершенно разных компиляторов/интерпретаторов, понимающих примерно одинаковые языки. FORTH совместимость ни к чему, т.к. он не живет долее одного проекта. пишет:
Не могу согласится, кроссплатформенность - это главное.
Отсутствие стандартов - ущербность.
Потом, когда закончу черновик, а если кто-то интересуется, пусть себяВот и опишите, пожалуйста, эту модель по-людски. пишет:
хотя бы проявит, я с удовольствием все распишу.
Про скрипты. Скрипты нужны для реализации своих хотелок.
И роль такая же, как роль bash в nix'ах.
Да вроде есть соседняя тема для философий, или это намек валить куда-нибудь вТак, что Вам проще будет либо завести отдельную тему-блог пишет:
фейсбук?
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Это не оправдывает их выкладывания без описания тестируемых компонентов, стратегии вычитывания и т.д. Т.е. "дураку пол-работы не показывают".vikt144 пишет:Они предназначены для тестирования компонентов будущего форта, виртуальной машины, хранилища строк итд. А так же чтобы впоследствии, когда работа с черновиком закончится, вычитать снова и привести в более читабельное состояние.
Программирование развивалось несколько десятков лет без кроссплатформенности, и за это время были написаны все известные полезные программы. После этого еще несколько десятков лет оно жило с кроссплатформенностью и все свелось к переписыванию в кроссплатформенном виде некоторых упрощенных версий написанных ранее программ.vikt144 пишет:Не могу согласится, кроссплатформенность - это главное.
Для некоторых методов программирования - плюс, для других - минус. FORTH стандарты противопоказаны. Это подтверждается историей его развития.vikt144 пишет:Отсутствие стандартов - ущербность.
Так, заинтересуйте! Как иначе "они" захотят проявиться?vikt144 пишет:Потом, когда закончу черновик, а если кто-то интересуется, пусть себя хотя бы проявит, я с удовольствием все распишу.
Именно! Как раз этой роли "командного интерпретатора, гоняющего главный цикл системы", пока в Вашем проекте и не просматривается.vikt144 пишет:Про скрипты. Скрипты нужны для реализации своих хотелок.
И роль такая же, как роль bash в nix'ах.
Скорее, организовать "фейсбук" здесь.vikt144 пишет:Да вроде есть соседняя тема для философий, или это намек валить куда-нибудь в фейсбук?
Gudleifr- Admin
- Сообщения : 3219
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Так это же и есть черновик. Работа находится в процессе создания.Это не оправдывает их выкладывания без описания тестируемых компонентов, стратегии вычитывания и т.д. пишет:
По мере ее осуществления, будут и ответы на все вопросы.
Подробное описание сырого полуфабриката занимает много времени,
очень сильно отвлекает. К тому же вываливание тяжелых,
трудно понимаемых текстов вряд ли помогло бы делу.
Уже завтра, если ничего не помешает, займусь моделью андроид приложения,
тем более удалось найти немало эффективных решений и некоторые ловушки,
которые могут начинающего программиста замучить.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Ну, если Вы обещаете ответы, то может сформулируете и вопросы?vikt144 пишет:По мере ее осуществления, будут и ответы на все вопросы.
Выкладывайте легко понимаемые. Я, конечно, сам пишу непонятно, но у кого-то должно получиться же...vikt144 пишет:К тому же вываливание тяжелых трудно понимаемых текстов вряд ли помогло бы делу.
Давайте. Чтобы не путать читателя, наверное надо тут немного почистить? Смотрите сами.vikt144 пишет:Уже завтра...
Gudleifr- Admin
- Сообщения : 3219
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Как бы я умел красиво и легко писать...Выкладывайте легко понимаемые. пишет:
По мере написания работы, комментировать будет легче.
Проще указать например на работающий скрипт,
чем рассуждать о применение скриптов, которые я
возможно когда-то напишу.
Впрочем последнюю часть надо откомментировать.
После старта программы надо набрать
1 load
Тогда загрузится порция форт текста которая указана.
Можно создать свою порцию текста,
назвать файл <number>.f, например 3.f
и поместить его туда же, где находится файл 1.f
Тогда его можно будет загрузит командой
3 load
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Организация рабочего места для программирования под android.
Сейчас официальное средство считается android studio.
У него недостаток - требует мощной машины.
Я не нашел способа просто скомпилировать apk файл,
обязательно требует эмуляцию самого androida,
причем на уровне процессора arm. У меня едва хватило терпения
дождаться загрузки заставки, после чего я плюнул и снес эту хрень
к черту. Тем более, что мелькнувший на форуме Winlion'а longer
подсказал чудесную альтернативу.
AIDE- IDE for Android Java
для компиляции программ прямо на android.
Создает сразу apk-файл, не требует наличия разных сред,
необходимых для запуска готового приложения
https://play.google.com/store/apps/details?id=com.aide.ui&hl=ru
Кроме нее я ничем другим не пользовался.
Можно редактировать ява программы прямо на телефоне, но это не очень
удобно.
Лучше создавать новую программу на телефоне с помощью aide,
затем выгрузить полученный проект на компьютер.
Отредактированный на компьютере проект загрузить обратно на
телефон, компилировать запускать...
Для этого можно использовать популярный ES проводник,
ипользуя удаленный доступ. Es проводник сделает телефон ftp сервером.
Теперь на компьютере с телефоном можно работать с помощью ftp клиента.
Внимание, es проводник не вполне безопасен, отправил без спроса
мои фотографии в облако, что с учетом того, что многие не выносят фотографироваться...
Можно использовать другие, более простые файл менеджеры для
телефона, MIX например, они тоже могут делать из android ftp сервер.
Сейчас официальное средство считается android studio.
У него недостаток - требует мощной машины.
Я не нашел способа просто скомпилировать apk файл,
обязательно требует эмуляцию самого androida,
причем на уровне процессора arm. У меня едва хватило терпения
дождаться загрузки заставки, после чего я плюнул и снес эту хрень
к черту. Тем более, что мелькнувший на форуме Winlion'а longer
подсказал чудесную альтернативу.
AIDE- IDE for Android Java
для компиляции программ прямо на android.
Создает сразу apk-файл, не требует наличия разных сред,
необходимых для запуска готового приложения
https://play.google.com/store/apps/details?id=com.aide.ui&hl=ru
Кроме нее я ничем другим не пользовался.
Можно редактировать ява программы прямо на телефоне, но это не очень
удобно.
Лучше создавать новую программу на телефоне с помощью aide,
затем выгрузить полученный проект на компьютер.
Отредактированный на компьютере проект загрузить обратно на
телефон, компилировать запускать...
Для этого можно использовать популярный ES проводник,
ипользуя удаленный доступ. Es проводник сделает телефон ftp сервером.
Теперь на компьютере с телефоном можно работать с помощью ftp клиента.
Внимание, es проводник не вполне безопасен, отправил без спроса
мои фотографии в облако, что с учетом того, что многие не выносят фотографироваться...
Можно использовать другие, более простые файл менеджеры для
телефона, MIX например, они тоже могут делать из android ftp сервер.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Установили aide на телефон, создаем программу, называем less0
Выгружаем на компьютер каталог
<некий путь>less0
там будет подкаталог
/app
и 2 файла
build.gradle
settings.gradle
В подкаталоге /app будут еще каталоги
/build
/src
и еще один файл
build.gradle ( не путать с файлом каталогом выше)
Его содержимое
-----------------------------------------------------
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
applicationId "com.virf.less"
minSdkVersion 9
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
---------------------------------------------------------------------------
тут интересна строчка minSdkVersion 9
это минимальная версия платформы, для которой будет скомпилирован проект.
sdkversion 9 соответствует android 2.3
sdkversion 14 android 4.0
соответсвия sdk и платформы можно посмотреть тут.
https://developer.android.com/studio/releases/platforms
В aide, если планируется использовать платформу до 4.0
править этот файл обязательно
Выгружаем на компьютер каталог
<некий путь>less0
там будет подкаталог
/app
и 2 файла
build.gradle
settings.gradle
В подкаталоге /app будут еще каталоги
/build
/src
и еще один файл
build.gradle ( не путать с файлом каталогом выше)
Его содержимое
-----------------------------------------------------
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
applicationId "com.virf.less"
minSdkVersion 9
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
---------------------------------------------------------------------------
тут интересна строчка minSdkVersion 9
это минимальная версия платформы, для которой будет скомпилирован проект.
sdkversion 9 соответствует android 2.3
sdkversion 14 android 4.0
соответсвия sdk и платформы можно посмотреть тут.
https://developer.android.com/studio/releases/platforms
В aide, если планируется использовать платформу до 4.0
править этот файл обязательно
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Исходные тексты отредактированы, возвращаем проект обратно в планшет
по wifiFTP, компилируем, нажимая на белый треугольничек вверху,
если нет ошибок, aide предложит установить и запустить
только что скомпилированное приложение.
Теперь осталось извлечь APK файл, чтобы установить его на другие смартфоны.
Как это сделать с помощью ESпроводника
https://gadgetmir.org/faq/kak-izvlech-apk-fajly-iz-android-ustrojstva-poshagovaya-instruktsiya.html
Другие способы
https://www.google.com/search?q=как+извлечь+apk+файл
В общем ничего сложного.
ps. Возможно в настройках усройства может понадобится включить опцию
"установка программ не из надежных источников"
Это позволит устройству загружать программы не только с гугломаркета.
Так же возможно придется включить эту опцию и на устройстве с aide.
Дальше программирование.
по wifiFTP, компилируем, нажимая на белый треугольничек вверху,
если нет ошибок, aide предложит установить и запустить
только что скомпилированное приложение.
Теперь осталось извлечь APK файл, чтобы установить его на другие смартфоны.
Как это сделать с помощью ESпроводника
https://gadgetmir.org/faq/kak-izvlech-apk-fajly-iz-android-ustrojstva-poshagovaya-instruktsiya.html
Другие способы
https://www.google.com/search?q=как+извлечь+apk+файл
В общем ничего сложного.
ps. Возможно в настройках усройства может понадобится включить опцию
"установка программ не из надежных источников"
Это позволит устройству загружать программы не только с гугломаркета.
Так же возможно придется включить эту опцию и на устройстве с aide.
Дальше программирование.
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Re: Черновик: Пошаговое создание форта на java
Список уроков программирования для андроид можно посмотреть здесь
https://startandroid.ru/ru/uroki/vse-uroki-spiskom.html
Они актуальны и для androidstudio, и для eclipse, и для aide.
Сначала разметка экрана
Идем в каталог ../src/main/res/layout/
Там находятся xml - файлы разметки экранов.
Пока работаем с одним экраном, поэтому там только один файл
main.xml
В aide, файлы разметки должны называться маленькими буквами,
не знаю, общее ли это правило или особенность aide.
Подробно о размещение элементов можно посмотреть тут.
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/38-urok-7-layout-parametry-dlja-view-elementov.html
Но поскольку движком нашего нашего проекта будут скрипты,
запускаемые событиями и кнопок нужно минимум, воспользуемся
простейшими структурами. Тем, кому нужны красивости, может читать
ссылки выше и ковырятся.
(тут // это не комментарий xml, это пояснение)
В aide вообще комментарий <!-- comment --> лучше добавлять в конец файла
в середине файла это кажется мутно работает.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" //базовый Layout
android:orientation="vertical" // все элементы расположены
android:layout_width="match_parent" // по вертикали
android:layout_height="match_parent"
android:gravity="center">
элемент 1
элемент 2
.....
<LinearLayout // вложенный layout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"> // элементы расположатся по горизонтали
элемент
элемент
элемент
</LinearLayout> // конец вложенного layout
элемент
элемент
</LinearLayout> // конец базового layout
отобразит примерно следущее
-----------------------------------------------------
элемент 1
элемент 2
элемент элемент элемент
элемент
элемент
---------------------------------------------------
https://startandroid.ru/ru/uroki/vse-uroki-spiskom.html
Они актуальны и для androidstudio, и для eclipse, и для aide.
Сначала разметка экрана
Идем в каталог ../src/main/res/layout/
Там находятся xml - файлы разметки экранов.
Пока работаем с одним экраном, поэтому там только один файл
main.xml
В aide, файлы разметки должны называться маленькими буквами,
не знаю, общее ли это правило или особенность aide.
Подробно о размещение элементов можно посмотреть тут.
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/38-urok-7-layout-parametry-dlja-view-elementov.html
Но поскольку движком нашего нашего проекта будут скрипты,
запускаемые событиями и кнопок нужно минимум, воспользуемся
простейшими структурами. Тем, кому нужны красивости, может читать
ссылки выше и ковырятся.
(тут // это не комментарий xml, это пояснение)
В aide вообще комментарий <!-- comment --> лучше добавлять в конец файла
в середине файла это кажется мутно работает.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" //базовый Layout
android:orientation="vertical" // все элементы расположены
android:layout_width="match_parent" // по вертикали
android:layout_height="match_parent"
android:gravity="center">
элемент 1
элемент 2
.....
<LinearLayout // вложенный layout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"> // элементы расположатся по горизонтали
элемент
элемент
элемент
</LinearLayout> // конец вложенного layout
элемент
элемент
</LinearLayout> // конец базового layout
отобразит примерно следущее
-----------------------------------------------------
элемент 1
элемент 2
элемент элемент элемент
элемент
элемент
---------------------------------------------------
vikt144- Сообщения : 128
Дата регистрации : 2017-03-29
Страница 1 из 2 • 1, 2
Страница 1 из 2
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|