DU4
- rastik
- Supermatfyz(ák|ačka)
- Příspěvky: 661
- Registrován: 19. 10. 2005 21:45
- Typ studia: Informatika Mgr.
- Login do SIS: wartr3am
- Bydliště: Praha
- Kontaktovat uživatele:
Uz ste to niekto skusali riesit? Cely den som zabil lustenim toho ich kodu, to nema nic spolocne s prekladacmi Uz niekolko hodin neviem prist na to, ako ziskam type_pointer pre vytvorenie premennej, pokial viem identifikator typu. Najblizsie co som nasiel je find_symbol, ale jeho vysledok neviem pretransformovat na pozadovany typ. Neviete niekto?
- MyS
- Donátor
- Příspěvky: 178
- Registrován: 22. 9. 2004 00:13
- Typ studia: Informatika Bc.
- Bydliště: The city of Dobříš
- Kontaktovat uživatele:
symbol_pointer sp = ctx->tab->find_symbol($1); type_pointer tp = sp->access_type()->type(); ...myslim.rastik píše:Uz ste to niekto skusali riesit? Cely den som zabil lustenim toho ich kodu, to nema nic spolocne s prekladacmi Uz niekolko hodin neviem prist na to, ako ziskam type_pointer pre vytvorenie premennej, pokial viem identifikator typu. Najblizsie co som nasiel je find_symbol, ale jeho vysledok neviem pretransformovat na pozadovany typ. Neviete niekto?
We don't need no education!
- rastik
- Supermatfyz(ák|ačka)
- Příspěvky: 661
- Registrován: 19. 10. 2005 21:45
- Typ studia: Informatika Mgr.
- Login do SIS: wartr3am
- Bydliště: Praha
- Kontaktovat uživatele:
Diky za radu. Ja som dosiel iba k tomu access_type().MyS píše:symbol_pointer sp = ctx->tab->find_symbol($1); type_pointer tp = sp->access_type()->type(); ...myslim.rastik píše:Uz ste to niekto skusali riesit? Cely den som zabil lustenim toho ich kodu, to nema nic spolocne s prekladacmi Uz niekolko hodin neviem prist na to, ako ziskam type_pointer pre vytvorenie premennej, pokial viem identifikator typu. Najblizsie co som nasiel je find_symbol, ale jeho vysledok neviem pretransformovat na pozadovany typ. Neviete niekto?
- MyS
- Donátor
- Příspěvky: 178
- Registrován: 22. 9. 2004 00:13
- Typ studia: Informatika Bc.
- Bydliště: The city of Dobříš
- Kontaktovat uživatele:
No, mailova korespondence se trochu protahla;), ale vysledky jsou rozhodne pouzitelne;).
> narazil jsem na problem s analyzou konstant, nebot jsem nenasel neco
> jako metodu mlc::symbol_tables::add_const_string(). Pritom ve tride
> symbol_tables je nevyuzita polozka type_pointer string_, domnivam se
> tedy, ze tato metoda byla omylem vynechana.
To je pravda, to opravime.
> Take bych se chtel zeptat, co presne znamena "symbolicky
> identifikator".
Symbolicky identifikator v puvodnich diagramech pana Wirtha znamenal
vyctovou konstantu. V nasi zjednodusene verzi ordinalniho typu (viz diagram
3) ovsem vyctovy typ neni, pojem symbolicky identifikator jsme tedy v
diagramu 8 zapomneli zrusit.
> jeste mam problem s metodou
> mlc::symbol_tables::create_array_type(). Jaky typ by se mel dosadit do
> index_type u vicerozmernych poli? Staci ten, ktery vraci metoda
> logical_integer()?
Ne, pro vicerozmerne pole je treba vytvorit vicevrstevnou strukturu
opakovanym volanim create_array_type, a to odzadu, tak aby
'array[1.2,3..4]of T'
odpovidalo
'array[1..2]of array[3..4]of T'
V Mlaskalu by index_type vzdy mel byt range_type, jine varianty (napr bool)
jsou zakazany.
> Rad bych se zeptal, co
> vse je ordinalni typ? Z diagramu a-3 totiz vyplyva, ze jsou to jen
> vycty.
Nikoliv vycty, ale intervaly, tj. range_type.
> V tom pripade ale ze stejneho diagramu plyne, ze typem nikdy
> nemuze byt cele cislo, boolean ani string
Ano, nemuze.
> Pokud by ale na druhou
> stranu byl string ordinalnim typem, slo by napsat napr. "array
> ['jedna'..'dve'] of integer".
Ne, to se nesmi.
> Druhy dotaz se tyka mezi vyctu. Maji se detekovat spatne meze (napr.
> 5..0) a jakou z chyb pripadne hlasit?
Dobra otazka, detekovat by se to melo, chybova hlaska na to ovsem zatim neni
pripravena, napravime to.
> DB> pojem symbolicky identifikator jsme tedy v diagramu 8 zapomneli
> zrusit.
> Kam se tedy radi typ "boolean"? Domnivam se, ze by mel byt soucasti
> diagramu unsigned konstanty, aby bylo mozne napr. psat "if x=true
> then". Bere se tedy jako "identifikator konstanty" v tomto i jinych
> diagramech?
Konstanty "TRUE" a "FALSE" jsou prednaplneny v tabulkach symbolu jako
bool_const_symbol a predpoklada se, ze se k nim prekladac bude chovat
stejne, jako k ostatnim pojmenovanym konstantam definovanym konstrukcemi
jako "const PI=3.14;".
Syntakticky se tedy "TRUE" a "FALSE" chovaji jako identifikator konstanty.
>>> typem nikdy nemuze byt cele cislo, boolean ani string
> DB> Ano, nemuze.
> Maji se tedy zapisy typu "var i:integer;", ktere jsou k nalezeni v
> du4-test1.mls, povazovat za semantickou chybu Type mismatch a tyto
> promenne vubec neregistrovat?
Moje odpoved se vazala na "ordinalni typ" pouzity v deklaraci pole.
V diagramu c. 3 byla chyba v tom, ze to pripoustelo pouze "identifikator
realneho typu", coz jsme nyni preznacili pro "indentifikator typu", a tam se
tedy schovaji odkazy na preddefinovane typy "INTEGER", "BOOLEAN", "REAL" a
"STRING".
> S tim souvisi, zda se ma registrovat a semanticky analyzovat procedura,
> ktera je neplatne definovana, napr. "procedure p(x: neni_to_typ);".
To neni dulezite, muze a nemusi.
We don't need no education!
- Kate
- Matfyz(ák|ačka) level III
- Příspěvky: 146
- Registrován: 8. 1. 2005 10:52
- Typ studia: Informatika Mgr.
- Login do SIS: opock4am
- Bydliště: Milada squat
- Kontaktovat uživatele:
MyS píše: symbol_pointer sp = ctx->tab->find_symbol($1); type_pointer tp = sp->access_type()->type(); ...myslim.
tak presne na tomhle mi to z me neznameho duvodu pada
konkretne nekde uvnitr toho find_symbolu, typove vse sedi
type:
DUTOK_IDENTIFIER {
symbol_pointer sp = ctx->tab->find_symbol($1);
...
}
UPDATE:
taky mi zda, jakoby problem byl v tom, ze se do te fce nepreda to, co ma v tu chvili $1 skutecne reprezentovat, ale proste "nic" od spravnyho typu (aspon se to diky MlaskalLval tvari, ze to ma spravny typ)
chjo .... jenže co s tím?
neresili jste nekdo podobny problem? prece jen mam porad jeste potize se v tom zorientovat
- Kate
- Matfyz(ák|ačka) level III
- Příspěvky: 146
- Registrován: 8. 1. 2005 10:52
- Typ studia: Informatika Mgr.
- Login do SIS: opock4am
- Bydliště: Milada squat
- Kontaktovat uživatele:
trefa nejakym zahadnym zpusobem se mi totiz predtim podarilo nevedomky vymazat ty polozky, co v structu MlaskalLval byly uz ze zadani, a pro DUTOK_IDENTIFIER jsem si tam pak vytvorila svoji, ale typu ls_id_index (??? - coz jsem jeste zahadnejsim zpusobem mela zapsane ze cvik) ... ani se nedivim, ze to ve vysledku padalo, byt to naoko typove sedelo.MyS píše: Asi hloupej dotaz, ale mas tam neco jako tohle?
%token<id_ci_> DUTOK_IDENTIFIER
kazdopadne diky moc za pomoc jdu se prokousavat tim chrchlem zdrojaku dal
- rastik
- Supermatfyz(ák|ačka)
- Příspěvky: 661
- Registrován: 19. 10. 2005 21:45
- Typ studia: Informatika Mgr.
- Login do SIS: wartr3am
- Bydliště: Praha
- Kontaktovat uživatele:
A je to nutne? V original subore to nebolo a ja pracujem s celou strukturou, bez urcenia presneho pola.MyS píše:Asi hloupej dotaz, ale mas tam neco jako tohle?Kate píše:taky mi zda, jakoby problem byl v tom, ze se do te fce nepreda to, co ma v tu chvili $1 skutecne reprezentovat
%token<id_ci_> DUTOK_IDENTIFIER
- rastik
- Supermatfyz(ák|ačka)
- Příspěvky: 661
- Registrován: 19. 10. 2005 21:45
- Typ studia: Informatika Mgr.
- Login do SIS: wartr3am
- Bydliště: Praha
- Kontaktovat uživatele:
Vygeneroval som vystup na testovaci subor prilozeny k projektu. Pokial to niekomu z vas bude davat nieco ine, ozvite sa. Diky.
- Přílohy
-
- du4-test1.txt
- mlc du4-test1.mls > du4-test1.out
- (1.42 KiB) Staženo 223 x