Benutzer:Grey/pss: Unterschied zwischen den Versionen
(→Directormengen) |
|||
(18 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
= Milstone 1 = | = Milstone 1 = | ||
* EBNF in BNF Grammatik umwandeln: | * EBNF in BNF Grammatik umwandeln: | ||
+ | == EBNF == | ||
+ | Gegeben ist folgende EBNF Syntax von microOPAL: | ||
+ | |||
+ | Prog -> Def Def * # | ||
+ | Def -> DEF Lhs == Expr | ||
+ | Lhs -> MAIN : Type | id ( [id : Type (, id : Type)*]) : Type | ||
+ | Type -> nat | bool | ||
+ | Expr -> number | true | false | id [ ( [Expr (, Expr)*] ) ] | IF Expr THEN Expr [ELSE Expr] FI | ||
+ | |||
+ | |||
+ | |||
+ | == BNF == | ||
+ | Erste Umformung inklusive semantischer Aktionen: | ||
+ | |||
+ | 1)Prog -> Def '''<1>''' Def´ #<br> | ||
+ | 2)Def -> <u>DEF</u> Lhs <u>==</u> Expr '''<2>'''<br> | ||
+ | 3)Def' -> Def '''<3>''' Def´ | ||
+ | 4) | e<br> | ||
+ | 5)Lhs -> <u>MAIN</u> '''<5>''' <u>:</u> Type '''<4>''' | ||
+ | 6) | <u>id</u> <u>(</u> '''<5>''' Lhs´ <u>)</u> <u>:</u> Type '''<4>'''<br> | ||
+ | 7)Lhs´ -> <u>id</u> <u>:</u> Type '''<6>''' Lhs´´ | ||
+ | 8) | e<br> | ||
+ | 9)Lhs´´ -> <u>,</u> <u>id</u> <u>:</u> Type Lhs´´ | ||
+ | 10) | e<br> | ||
+ | 11)Type -> <u>nat</u> '''<15>''' | ||
+ | 12) | <u>bool</u> '''<15>''' <br> | ||
+ | 13)Expr -> <u>number</u> '''<7>''' | ||
+ | 14) | <u>true</u> '''<8>''' | ||
+ | 15) | <u>false</u> '''<8>''' | ||
+ | 16) | <u>id</u> Expr´ | ||
+ | 17) | <u>IF</u> Expr <u>THEN</u> Expr fi´ <br> | ||
+ | 18)Expr´ -> <u>(</u> '''<10>''' Expr´´ <u>)</u> '''<9>''' | ||
+ | 19) | e '''<12>'''<br> | ||
+ | 20)Expr´´ -> Expr '''<11>''' Expr´´´ | ||
+ | 21) | e<br> | ||
+ | 22)Expr´´´ -> <u>,</u> Expr '''<11>''' Expr´´´ | ||
+ | 23) | e<br> | ||
+ | 24)fi´ -> <u>ELSE</u> Expr FI '''<14>''' | ||
+ | | FI '''<13>''' <br> | ||
+ | |||
+ | <u>Semantische Aktionen:</u><br> | ||
+ | '''<1>''' : makeDefList<br> | ||
+ | '''<2>''' : makeDef<br> | ||
+ | '''<3>''' : add2DefList<br> | ||
+ | '''<4>''' : makeLhs<br> | ||
+ | '''<5>''' : makeLhsParList<br> | ||
+ | '''<6>''' : add2LhsParList<br> | ||
+ | '''<7>''' : makeNatConst<br> | ||
+ | '''<8>''' : makeBoolConst<br> | ||
+ | '''<9>''' : makeFunCall<br> | ||
+ | '''<10>''' : makeExprList<br> | ||
+ | '''<11>''' : add2ExprList<br> | ||
+ | '''<12>''' : makeParRef<br> | ||
+ | '''<13>''' : makeCond<br> | ||
+ | '''<14>''' : makeElse<br> | ||
+ | '''<15>''' : makeType<br> | ||
− | == | + | == Directormengen == |
+ | {| border="2" cellspacing="0" cellpadding="4" rules="all" style="margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9; font-size:95%; empty-cells:show;" | ||
+ | ! {{Highlight1}} |Produktion | ||
+ | ! {{Highlight1}} |Directormenge | ||
+ | ! {{Highlight1}} |disjunkt? | ||
+ | |- | ||
+ | |1) | ||
+ | |uninteressant | ||
+ | |ja | ||
+ | |- | ||
+ | |2) | ||
+ | |uninteressant | ||
+ | |ja | ||
+ | |- | ||
+ | |3) <br>4) | ||
+ | |{<u>DEF</u>} <br>{#, <u>DEF</u>} | ||
+ | |ja | ||
+ | |- | ||
+ | |5) <br>6) | ||
+ | |{<u>MAIN</u>} <br>{<u>id</u>} | ||
+ | |ja | ||
+ | |- | ||
+ | |7) <br>8) | ||
+ | |{<u>id</u>} <br>{<u>)</u>} | ||
+ | |ja | ||
+ | |- | ||
+ | |9) <br> 10) | ||
+ | |{<u>,</u>} <br>{<u>)</u>} | ||
+ | |ja | ||
+ | |- | ||
+ | |11) <br> 12) | ||
+ | |{<u>nat</u>} <br>{<u>bool</u>} | ||
+ | |ja | ||
+ | |- | ||
+ | |13) <br>14) <br>15) <br>16) <br>17) | ||
+ | |{<u>number</u>} <br>{<u>true</u>} <br>{<u>false</u>} <br>{<u>id</u>} <br>{<u>IF</u>} | ||
+ | |ja | ||
+ | |- | ||
+ | |18) <br>19) | ||
+ | |{<u>(</u>} <br>{<u>THEN</u>, <u>ELSE</u>, <u>FI</u>, <u>,</u>, <u>)</u>} | ||
+ | |ja | ||
+ | |- | ||
+ | |20) <br>21) | ||
+ | |{<u>number</u>, <u>true</u>, <u>false</u>, <u>id</u>, <u>IF</u>} <br>{<u>,</u>, <u>)</u>} | ||
+ | |ja | ||
+ | |- | ||
+ | |22) <br>23) | ||
+ | |{<u>,</u>} <br> {<u>)</u>} | ||
+ | |ja | ||
+ | |- | ||
+ | |24) <br>25) | ||
+ | |{<u>ELSE</u>} <br>{<u>FI</u>} | ||
+ | |ja | ||
+ | |} | ||
− | + | == Abstrakter Syntaxbaum == | |
+ | http://www.freitagsrunde.org/~grey/pss/absy.jpg | ||
− | |||
− | |||
− | |||
− | + | [[Kategorie:GREY-PSS]] |
Aktuelle Version vom 11. Januar 2006, 20:38 Uhr
Inhaltsverzeichnis
Milstone 1
- EBNF in BNF Grammatik umwandeln:
EBNF
Gegeben ist folgende EBNF Syntax von microOPAL:
Prog -> Def Def * # Def -> DEF Lhs == Expr Lhs -> MAIN : Type | id ( [id : Type (, id : Type)*]) : Type Type -> nat | bool Expr -> number | true | false | id [ ( [Expr (, Expr)*] ) ] | IF Expr THEN Expr [ELSE Expr] FI
BNF
Erste Umformung inklusive semantischer Aktionen:
1)Prog -> Def <1> Def´ #
2)Def -> DEF Lhs == Expr <2>
3)Def' -> Def <3> Def´ 4) | e
5)Lhs -> MAIN <5> : Type <4> 6) | id ( <5> Lhs´ ) : Type <4>
7)Lhs´ -> id : Type <6> Lhs´´ 8) | e
9)Lhs´´ -> , id : Type Lhs´´ 10) | e
11)Type -> nat <15> 12) | bool <15>
13)Expr -> number <7> 14) | true <8> 15) | false <8> 16) | id Expr´ 17) | IF Expr THEN Expr fi´
18)Expr´ -> ( <10> Expr´´ ) <9> 19) | e <12>
20)Expr´´ -> Expr <11> Expr´´´ 21) | e
22)Expr´´´ -> , Expr <11> Expr´´´ 23) | e
24)fi´ -> ELSE Expr FI <14> | FI <13>
Semantische Aktionen:
<1> : makeDefList
<2> : makeDef
<3> : add2DefList
<4> : makeLhs
<5> : makeLhsParList
<6> : add2LhsParList
<7> : makeNatConst
<8> : makeBoolConst
<9> : makeFunCall
<10> : makeExprList
<11> : add2ExprList
<12> : makeParRef
<13> : makeCond
<14> : makeElse
<15> : makeType
Directormengen
Vorlage:Highlight1 |Produktion | Vorlage:Highlight1 |Directormenge | Vorlage:Highlight1 |disjunkt? |
---|---|---|
1) | uninteressant | ja |
2) | uninteressant | ja |
3) 4) |
{DEF} {#, DEF} |
ja |
5) 6) |
{MAIN} {id} |
ja |
7) 8) |
{id} {)} |
ja |
9) 10) |
{,} {)} |
ja |
11) 12) |
{nat} {bool} |
ja |
13) 14) 15) 16) 17) |
{number} {true} {false} {id} {IF} |
ja |
18) 19) |
{(} {THEN, ELSE, FI, ,, )} |
ja |
20) 21) |
{number, true, false, id, IF} {,, )} |
ja |
22) 23) |
{,} {)} |
ja |
24) 25) |
{ELSE} {FI} |
ja |