Zum Inhalt springen
Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Benutzer:Grey/pss: Unterschied zwischen den Versionen

Aus FreitagsrundenWiki
 
(13 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
= Milstone 1 =
= Milstone 1 =
* EBNF in BNF Grammatik umwandeln:
* EBNF in BNF Grammatik umwandeln:
== EBNF ==
== EBNF ==
Gegeben ist folgende EBNF Syntax von microOPAL:
Gegeben ist folgende EBNF Syntax von microOPAL:
Zeile 11: Zeile 10:
  Expr -> number | true | false | id [ ( [Expr (, Expr)*] ) ] | IF Expr THEN Expr [ELSE Expr] FI
  Expr -> number | true | false | id [ ( [Expr (, Expr)*] ) ] | IF Expr THEN Expr [ELSE Expr] FI


== Semantische Aktionen ==
Semantische Aktionen in der Original Grammatik:
Prog -> Def Def * # (1)
Def  -> DEF Lhs == Expr (2)
Lhs  -> MAIN : Type (3)| id ( [id : Type (, id : Type)*]) : Type (4)
Type -> nat | bool
Expr -> number | true | false | id [ ( [Expr (, Expr)*] ) ](5)| IF Expr THEN Expr [ELSE Expr] FI (6)




== BNF ==
== BNF ==
Erste Umformung:
Erste Umformung inklusive semantischer Aktionen:
 
Prog  ->  Def # <br>
Def  ->  Def Def'
        |  Def'<br>
Def'  ->  <u>DEF</u> Lhs <u>==</u> Expr<br>
Lhs  ->  <u>MAIN</u> <u>:</u> Type
        |  <u>id</u> <u>(</u> Lhs' <u>)</u> <u>:</u> Type<br>
Lhs'  ->  <u>id</u> <u>:</u> Type A'<br>
A'    ->  <u>,</u> <u>id</u> <u>:</u> Type A'
        |  e<br>
Type  ->  <u>nat</u>
        |  <u>bool</u><br>
Expr  ->  Value
        |  <u>id</u> <u>(</u> Expr' <u>)</u>
        |  <u>IF</u> Expr <u>THEN</u> Expr E <u>FI</u><br>
Expr' ->  Expr Expr'
        |  <u>,</u> Expr Expr'
        |  e<br>
E    ->  <u>ELSE</u> Expr
        |  e<br>
Value ->  <u>number</u>
        |  <u>true</u>
        |  <u>false</u>


  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>


  1)Prog  ->  Def Def' #  <1><br>
<u>Semantische Aktionen:</u><br>
  2)Def  ->  <u>DEF</u> Lhs <u>==</u> Expr <2><br>
'''<1>''' : makeDefList<br>
  3)Def' -> Def Def'
'''<2>''' : makeDef<br>
  3b)       |  e<br>
'''<3>''' : add2DefList<br>
  4)Lhs  ->  <u>MAIN</u> <u>:</u> Type <3>
'''<4>''' : makeLhs<br>
  5) |  <u>id</u> <u>(</u> Lhs' <u>)</u> <u>:</u> Type <4><br>
'''<5>''' : makeLhsParList<br>
  6)Lhs' ->  <u>id</u> <u>:</u> Type Lhs´´ <5>
'''<6>''' : add2LhsParList<br>
  7) |  e<br>
'''<7>''' : makeNatConst<br>
  8)Lhs´´ ->  <u>,</u> Lhs'
'''<8>''' : makeBoolConst<br>
  9) |  e<br>
'''<9>''' : makeFunCall<br>
10)Type  ->  <u>nat</u>
'''<10>''' : makeExprList<br>
11)      |  <u>bool</u><br>
'''<11>''' : add2ExprList<br>
12)Expr    ->  <u>number</u>
'''<12>''' : makeParRef<br>
13)      |  <u>true</u>
'''<13>''' : makeCond<br>
14)      |  <u>false</u>
'''<14>''' : makeElse<br>
15)    |  <u>id</u> Expr' <6>
'''<15>''' : makeType<br>
16) |  <u>IF</u> Expr <u>THEN</u> Expr fi' <u>FI</u> <7><br>
17)Expr' ->  <u>(</u> Expr´´ <u>)</u>
18) |  e<br>
19)Expr´´ ->  Expr Expr´´´ <8>
20)      |  e<br>
21)Expr´´´ ->  <u>,</u> Expr
22) |  e<br>
23)fi'     ->  <u>ELSE</u> Expr
      |  e<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;"
{| 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}} |Produktion
Zeile 87: Zeile 72:
|ja
|ja
|-
|-
|3) <br>3b)
|3) <br>4)
|{<u>DEF</u>} <br>{#, <u>DEF</u>}
|{<u>DEF</u>} <br>{#, <u>DEF</u>}
|ja
|ja
|-
|-
|4) <br>5)
|5) <br>6)
|{<u>MAIN</u>} <br>{<u>id</u>}
|{<u>MAIN</u>} <br>{<u>id</u>}
|ja
|ja
|-
|-
|6) <br>7)
|7) <br>8)
|{<u>id</u>} <br>{<u>)</u>}
|{<u>id</u>} <br>{<u>)</u>}
|ja
|ja
|-
|-
|8) <br> 9)
|9) <br> 10)
|{<u>,</u>} <br>{<u>)</u>}
|{<u>,</u>} <br>{<u>)</u>}
|ja
|ja
|-
|-
|10) <br> 11)
|11) <br> 12)
|{<u>nat</u>} <br>{<u>bool</u>}
|{<u>nat</u>} <br>{<u>bool</u>}
|ja
|ja
|-
|-
|12) <br>13) <br>14) <br>15) <br>16)
|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>}
|{<u>number</u>} <br>{<u>true</u>} <br>{<u>false</u>} <br>{<u>id</u>} <br>{<u>IF</u>}
|ja
|ja
|-
|-
|17) <br>18)
|18) <br>19)
|{<u>(</u>} <br>{<u>THEN</u>, <u>ELSE</u>, <u>FI</u>, <u>,</u>, <u>)</u>}
|{<u>(</u>} <br>{<u>THEN</u>, <u>ELSE</u>, <u>FI</u>, <u>,</u>, <u>)</u>}
|ja
|ja
|-
|-
|19) <br>20)
|20) <br>21)
|{<u>number</u>, <u>true</u>, <u>false</u>, <u>id</u>, <u>IF</u>} <br>{<u>,</u>, <u>)</u>}
|{<u>number</u>, <u>true</u>, <u>false</u>, <u>id</u>, <u>IF</u>} <br>{<u>,</u>, <u>)</u>}
|ja
|ja
|-
|-
|21) <br>22)
|22) <br>23)
|{<u>,</u>} <br> {<u>)</u>}
|{<u>,</u>} <br> {<u>)</u>}
|ja
|ja
|-
|-
|23) <br>24)
|24) <br>25)
|{<u>ELSE</u>} <br>{<u>FI</u>}
|{<u>ELSE</u>} <br>{<u>FI</u>}
|ja
|ja
|}
|}
== Abstrakter Syntaxbaum ==
http://www.freitagsrunde.org/~grey/pss/absy.jpg


[[Kategorie:GREY-PSS]]
[[Kategorie:GREY-PSS]]

Aktuelle Version vom 11. Januar 2006, 20:38 Uhr

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

Abstrakter Syntaxbaum

http://www.freitagsrunde.org/~grey/pss/absy.jpg