( uid_15483 | 2017. 10. 21., szo – 09:57 )

+1

Ez már a topik indítónak:
Először definiálni kell egy nyelvtant, utána van értelme elkezdeni a lexert, utána a parsert, utána a szemantikai elemzést.

Egy-két észrevétel:
- Az tömbElemElérés szabályban csak az "azonosító [ ]" kell, a másik levezethető ebből.

- A lexerhez kell a literálok definíciója, azt csak a kódban láttam, a dokumentációban nem. Mondjuk csak átfutottam mindkettőt.

- A kódban nem tekinted a \r karaktert whitespacenek. Van erre beépített c# függvény, char.IsWhitespace().

- Én egy típus szabályt írnék, ahol mind a 8 típus fel van sorolva: egész, egész[], tört, tört[],... Egyszerűbb lesz a nyelvtan mwg a feldolgozás, és mivel úgysem lehet többféle típus, jó eredményt ad így is.

- A ciklus_vége lemaradt a nyelvtanban, csak a dokumentációban van benne.

- A nyelvtan szerint a "ha", "ciklus", stb. törzsében csak 1 parancs fordulhat elő, nem <állítások> akar lenni az a ?

- Én a változó deklarációt csak a program elején engedném meg, rengeteg szívástól kíméled meg magad, ha nem kell láthatóságot meg ilyesmiket kezelni. Ha ez nem számít a szakdogához akkor persze mindegy.

- Én az "és" és "vagy" kifejezéshez használatos szabályokat összevonnám, egyszerűbb nyelvtan és kb mindegy. Ugyan ez a relációkkal.

- Parsereknél gyakoriak az LL(k) elemzők, sok szakirodalom van hozzájuk. Viszonylag egyszerű a megértése meg az implementációja is. Nem lehet a nyelv bal rekurzív, de ez relative egyszerű átalakítással kiküszöbölhető. Főleg ha te definiálod a nyelvet :)