Transformation of Applicative Specifications into Imperative ...

Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...

26.09.2013 Views

APPENDIX E. ANTLR GRAMMAR : v l = v a l u e _ l i t e r a l {p = new V a l u e L i t e r a l P a t t e r n ( v l ) ; } | vovn = name {p = new NamePattern ( vovn . value_or_variable_name ( ) . id ( ) , new NoOptionalId ( ) ) ; } | vovn = name LPAREN ip = pattern { i n n e r P a t t e r n L i s t . g e t L i s t ( ) . add ( ip ) ; } ( COMMA ip = pattern { i n n e r P a t t e r n L i s t . g e t L i s t ( ) . add ( ip ) ; } ) ∗ RPAREN {p = new RecordPattern ( vovn . value_or_variable_name ( ) , i n n e r P a t t e r n L i s t ) ; } | UNDERSCORE { p = new WildcardPattern ( ) ; } | LPAREN ip = pattern { i n n e r P a t t e r n L i s t . g e t L i s t ( ) . add ( ip ) ; } ( COMMA ip = pattern { i n n e r P a t t e r n L i s t . g e t L i s t ( ) . add ( ip ) ; } ) ∗ RPAREN {p = new ProductPattern ( i n n e r P a t t e r n L i s t ) ; } | LLIST ( ip = pattern { i n n e r P a t t e r n L i s t . g e t L i s t ( ) . add ( ip ) ; } ( COMMA ip = pattern { i n n e r P a t t e r n L i s t . g e t L i s t ( ) . add ( ip ) ; } ) ∗ RLIST { lp = new Make_EnumeratedListPattern ( new EnumeratedListPattern ( new I n n e r P a t t e r n L i s t ( i n n e r P a t t e r n L i s t ) ) ) ; } | RLIST { lp = new Make_EnumeratedListPattern ( new EnumeratedListPattern ( new NoInnerPattern ( ) ) ) ; } ) 502

; ( HAT ip = pattern { lp = new ConcatenatedListPattern ( new EnumeratedListPattern ( new I n n e r P a t t e r n L i s t ( i n n e r P a t t e r n L i s t ) ) , ip ) ; } ) ? {p = new MakeListPattern ( lp ) ; } i n t _ l i t returns [ V a l u e L i t e r a l I n t e g e r i ] { i = null ; } : a :INTEGER_LITERAL { i = new V a l u e L i t e r a l I n t e g e r ( a . getText ( ) ) ; } ; r e a l _ l i t returns [ V a l u e L i t e r a l R e a l r ] { r = null ; } : a :REAL_LITERAL { r = new V a l u e L i t e r a l R e a l ( a . getText ( ) ) ; } ; b o o l _ l i t returns [ V a l u e L i t e r a l B o o l b ] { b = null ; } : FALSE { b = new V a l u e L i t e r a l B o o l ( " f a l s e " ) ; } | TRUE {b = new V a l u e L i t e r a l B o o l ( " true " ) ; } ; t e x t _ l i t returns [ ValueLiteralText t ] { t = null ; } : a :TEXT_LITERAL { t = new ValueLiteralText ( a . getText ( ) ) ; } ; c h a r _ l i t returns [ ValueLiteralChar c ] { c = null ; } : a :CHAR_LITERAL { c = new ValueLiteralChar ( a . getText ( ) ) ; } ; class RSLLexer extends Lexer ; options { charVocabulary= ’ \u0000 ’ . . ’ \u007F ’ ; // Allow only a s c i i k=2; 503

APPENDIX E. ANTLR GRAMMAR<br />

: v l = v a l u e _ l i t e r a l<br />

{p = new V a l u e L i t e r a l P a t t e r n ( v l ) ; }<br />

|<br />

vovn = name<br />

{p = new NamePattern (<br />

vovn . value_or_variable_name ( ) . id ( ) ,<br />

new NoOptionalId ( ) ) ; }<br />

|<br />

vovn = name LPAREN ip = pattern<br />

{ i n n e r P a t t e r n L i s t . g e t L i s t ( ) . add ( ip ) ; }<br />

(<br />

COMMA ip = pattern<br />

{ i n n e r P a t t e r n L i s t . g e t L i s t ( ) . add ( ip ) ; }<br />

) ∗<br />

RPAREN<br />

{p = new RecordPattern (<br />

vovn . value_or_variable_name ( ) ,<br />

i n n e r P a t t e r n L i s t ) ; }<br />

|<br />

UNDERSCORE { p = new WildcardPattern ( ) ; }<br />

|<br />

LPAREN ip = pattern<br />

{ i n n e r P a t t e r n L i s t . g e t L i s t ( ) . add ( ip ) ; }<br />

(<br />

COMMA ip = pattern<br />

{ i n n e r P a t t e r n L i s t . g e t L i s t ( ) . add ( ip ) ; }<br />

) ∗<br />

RPAREN<br />

{p = new ProductPattern ( i n n e r P a t t e r n L i s t ) ; }<br />

|<br />

LLIST<br />

(<br />

ip = pattern<br />

{ i n n e r P a t t e r n L i s t . g e t L i s t ( ) . add ( ip ) ; }<br />

(<br />

COMMA ip = pattern<br />

{ i n n e r P a t t e r n L i s t . g e t L i s t ( ) . add ( ip ) ; }<br />

) ∗<br />

RLIST<br />

{ lp = new Make_EnumeratedListPattern (<br />

new EnumeratedListPattern (<br />

new I n n e r P a t t e r n L i s t (<br />

i n n e r P a t t e r n L i s t ) ) ) ; }<br />

|<br />

RLIST<br />

{ lp = new Make_EnumeratedListPattern (<br />

new EnumeratedListPattern (<br />

new NoInnerPattern ( ) ) ) ; }<br />

)<br />

502

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!