thejoeejoee / VUT-FIT-IFJ-2017-toolkit

IDE for custom language IFJcode17 and pack of automatic tests for compilers of that language.
https://ifj.josefkolar.cz/
GNU General Public License v3.0
23 stars 11 forks source link

BASE: 11/07, 11/09, 11/10 #59

Closed Trsak closed 6 years ago

Trsak commented 6 years ago

Podle mě by mělo jít o lexikální chyby.

Freebasic také vrací jedničku.

scope
    dim x as integer = &b1010041
    dim y as integer = &o778777
    dim z as integer = &hagbaba
end scope
thejoeejoee commented 6 years ago

Tohle si bude muset obhájit @martinkobelka, taky jsme o tom měli delší diskuzi, dám mu vědět.

martinkobelka commented 6 years ago

Definujme si lexému. Lexéma je token bez dodatečných informací. Mimo to je to NEJDELŠÍ posloupnost znaků dávající smysl. Lexer se tedy pokusí přečíst takový token/lexém. Přečte &b10100, čtyřka už tam nepatří to už je pro něj další token. Dva integery po sobě nedávají gramaticky smysl => syntax error. Je to to obdovné jako &b10100+42. '+' Už tam nepatří, je to další token (zde je to syntakticky správně => žádná chyba). Je to můj názor, můžu se plést ale jsem si na 80 % jist, že mám pravdu.

Trsak commented 6 years ago

Z toho co píší na forum jsem pochopil, že u rozšíření se máme spoléhat na freebasic - jak tedy vysvětlíš, že ten vrací lexikální chybu?

martinkobelka commented 6 years ago

11/07 -jdoodle.bas(3) error 3: Expected End-of-Line in 'dim x as integer = &b1010041

11/09 - -||- jdoodle.bas(3) error 3: Expected End-of-Line in 'dim x as integer = &o778777'

11/10 - -||- error 3: Expected End-of-Line, found 'gbaba' in 'dim x as integer = &hagbaba'

Nejsem příliš dobrý v jazycích, překlad ve všech případech ale je" Očekával jsem EOL, dostal jsem <nějaký identifikátor>" pro mě jasná syntaktická chyba.

Trsak commented 6 years ago

Spouštěl jsem si to na nějakém online kompilátoru a vyhazovalo mi to určité návratové kódy, nakonec se ale ukázalo že se nejedná o chybové kódy fbc. Toto mě hodně zmátlo.

Nakonec jsme se po dlouhém dumání shodli, že tvoje argumentace opravdu dává smysl a testy by tedy měly vracet opravdu syntaktickou chybu.

Díky za vysvětlení.