Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Czy tak robi się język skryptowy?

Ostatnio zmodyfikowano 2012-08-25 18:48
Autor Wiadomość
pekfos
» 2012-08-23 21:19:27
@Mrovqa: Nie wiem czy nie było by to zbyt skomplikowane dla Autora Tematu :P

Ale wyglądało by to tak:
jeśli 1. znak to ", to znajdź następny znak " (pomijając \"), a dalej wiadomo co.

Da się szukać od określonej pozycji? Jak?
Znasz podstawy C++?
Jakbyś znał, to wpadł byś na pomysł napisania pętli, która by to rozdzielała. (Jakieś 10 linii).
Mógłbyś też poszukać w dokumentacji. std::string oferuje kilka funkcji szukających.
P-63464
bingo009
» 2012-08-23 21:20:55
Jak pisałem, najlepiej żebyś pierwsze przelatywał składnie, a jak znajdziesz polecenie, to sprawdzasz jego parametry.
P-63465
mati1qazxsw2
» 2012-08-23 21:21:40
Pętelka for, bufor i stos.Czy to takie trudne pekfos?:p
P-63466
Mrovqa
» 2012-08-23 21:43:52
Samo std::string::find przyjmuje w jednym za argumentów od której pozycji szukać ;) Poza tym bufor, pętelka, wskaźnik i też zrobisz ;)
P-63473
klex234
Temat założony przez niniejszego użytkownika
» 2012-08-24 15:13:22
Teraz jest ok?:

C/C++
#include <iostream>
#include <windows.h>
#include <string>
#include <conio.h>

using namespace std;


int main() {
   
    int a = 1, e;
    string b, c, d;
    char tab;
   
   
    while( a == 1 )
    {
        cout << ">";
        getline( cin, b );
       
       
        if( b.find( "exit" ) == 0 ) { if( b.length() > 4 ) { cout << "Procedura Exit nie ma parametrow!" << endl; } else { return 0; } } // zamyka program
        if( b.find( "echo" ) == 0 ) { if( b.length() > 4 ) { e = b.find_first_of( " " ); c = b.substr( e + 1 ); cout << c << endl; } else { cout << "Blad, za malo argumentow" << endl; } } // wyĹ›wietla tekst
       
       
       
    }
   
   
}
P-63537
Mrovqa
» 2012-08-24 19:40:04
@up parsera nigdzie nie widzę... btw exit przyjmuje parametr - to co zwraca program, tj. "exit 4" to tak jakby "return 4;" ;)
P-63546
klex234
Temat założony przez niniejszego użytkownika
» 2012-08-25 10:24:12
proszę, oto parser:

C/C++
#include <iostream>
#include <windows.h>
#include <string>
#include <sstream>
#include <fstream>
#include <vector>
#include <conio.h>

using namespace std;

int main() {
   
    int a = 1, e, f, g, k; //jak by cos byly potrzebne
    string b, c, d, i, l, n; //jak by cos byly potrzebne
    fstream plik;
   
    cout << "File localization, Pleas..." << endl;
    getline( cin, l );
   
    plik.open( l.c_str(), ios::in | ios::out );
   
   
   
    if( plik.good() )
    {
       
        while( !plik.eof() )
        {
           
            getline( plik, b );
           
            if( b.find( "exit" ) == 0 ) { if( b.length() > 4 ) { cout << "Procedura Exit nie ma parametrow!" << endl; } else { return 0; } } // zamyka program
            if( b.find( "echo" ) == 0 ) { if( b.length() > 4 ) { e = b.find_first_of( " " ); c = b.substr( e + 1 ); cout << c << endl; } else { cout << "Blad, za malo argumentow" << endl; } } // wyĹ›wietla tekst
            if( b.find( "open" ) == 0 ) { if( b.length() > 4 ) { e = b.find_first_of( " " ); c = b.substr( e + 1 ); cout << "Opening: " << c << endl; ShellExecute( NULL, "open", c.c_str(), NULL, NULL, SW_SHOWNORMAL ); } else { cout << "Blad, za malo argumentow" << endl; } }
            if( b.find( "//" ) == 0 ) { }
            if( b.find( "newline" ) == 0 ) { if( b.length() > 7 ) { cout << "Procedura Newline nie ma parametrow!" << endl; } else { cout << endl; } }
           
        }
       
        while( a == 1 )
        {
            cout << ">";
            getline( cin, b );
           
            if( b.find( "exit" ) == 0 ) { if( b.length() > 4 ) { cout << "Procedura Exit nie ma parametrow!" << endl; } else { return 0; } } // zamyka program
            if( b.find( "echo" ) == 0 ) { if( b.length() > 4 ) { e = b.find_first_of( " " ); c = b.substr( e + 1 ); cout << c << endl; } else { cout << "Blad, za malo argumentow" << endl; } } // wyĹ›wietla tekst
            if( b.find( "open" ) == 0 ) { if( b.length() > 4 ) { e = b.find_first_of( " " ); c = b.substr( e + 1 ); cout << "Opening: " << c << endl; ShellExecute( NULL, "open", c.c_str(), NULL, NULL, SW_SHOWNORMAL ); } else { cout << "Blad, za malo argumentow" << endl; } }
            if( b.find( "//" ) == 0 ) { }
            if( b.find( "newline" ) == 0 ) { if( b.length() > 7 ) { cout << "Procedura Newline nie ma parametrow!" << endl; } else { cout << endl; } }
        }
       
    }
    else
    { cout << "Blad przy otwieraniu pliku" << endl; }
   
}

Mam jeszcze pytanko:
Jak robi się to z otwórz za pomocą?
Chodzi o to że ktoś otwiera skrypt przez interpreter a to interpretuje, a nie wpisywać nazwe pliku w interpreterze.
P-63556
Mrovqa
» 2012-08-25 14:48:34
Zapraszam do mojego artykułu, tam jest to opisane ;)
[Windows, rejestr] Własne rozszerzenie pliku (wiem, że są błędy - bug w pdf readerze; każde 'ć' zamieniało na 'd' przy kopiowaniu :/ - tak samo jest z moim drugim artykułem)

Btw nadal twój parser jest bardzo czuły (zbędne białe znaki, dodatkowe parametry, które powinny być ignorowane, wielkość liter, itp), ale nie będę Cię tym zamęczać. Zapewne nie znasz klas... w klasie taki parser lepiej by wyglądał i wygodniej by się go używało ;)
P-63564
1 2 3 4 « 5 » 6
Poprzednia strona Strona 5 z 6 Następna strona