diff --git a/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup
index 04f2b0ae2a185664f8405d3e852277be0bdd39d7..7da60d4225d1be5523d6fadfe0177a76382883f0 100644
--- a/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup
+++ b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup
@@ -2,12 +2,14 @@
 package avatartranslator.fromsml;
 import java_cup.runtime.*;
 parser code {:
+  void setStringExpr(boolean _b) { ((SCANNERCLASS) getScanner()).setStringExpr(_b); }
 :}
 
 /* Terminals (tokens returned by the scanner). */
 
 terminal Integer INT;
 terminal Boolean BOOL;
+terminal String STRINGEXPR;
 
 terminal EQ, LPAR, RPAR, LBRAC, RBRAC, COMMA, SEMICOLON, COLON, POINT, EQUAL, GETS;
 
@@ -172,9 +174,9 @@ bfChDecl ::= PART channelname COLON BFIFO_T EQUAL BFIFO_T LPAR RELATION_F EQUAL
 
 // SIGNAL BINDING $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
 signalBinding ::= inSignalBinding | outSignalBinding;
-insignalBinding ::= BINDING COLON INSIGNALBINDING_T BIND blockChain POINT signalname EQUAL channelname SEMICOLON
+inSignalBinding ::= BINDING COLON INSIGNALBINDING_T BIND blockChain POINT signalname EQUAL channelname SEMICOLON
 ;
-outsignalBinding ::= BINDING COLON OUTSIGNALBINDING_T BIND blockChain POINT signalname EQUAL channelname SEMICOLON
+outSignalBinding ::= BINDING COLON OUTSIGNALBINDING_T BIND blockChain POINT signalname EQUAL channelname SEMICOLON
 ;
 
 // MESSAGE DECLARATION $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
@@ -208,8 +210,47 @@ redefineField ::=
 
 
 // BLOCK DECLARATION $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
-blockDecl ::= blockDeclHEADER blockDeclBODY;
-blockDeclHEADER ::=
-    | PART DEF BLOCKNAME specializes AVBLOCK_T
-    | PART DEF AVATARNAME specializes AVBLOCK_T
+blockDecl ::=
+    | PART blockname COLON AVBLOCK_T LBRAC RBRAC
+    | PART blockname COLON AVBLOCK_T LBRAC blockDeclBODY RBRAC
 ;
+blockDeclBODY ::=
+    | blockItem
+    | blockDeclBODY
+;
+blockItem ::=
+      attributeDecl
+    | methodDecl
+    | signalDecl
+    | timerDecl
+    | stateMachine
+    | blockDecl
+;
+
+// ATTRIBUTE DECLARATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+attributeDecl ::=
+      attributeDeclHEADER SEMICOLON
+    | attributeDeclHEADER gets STRINGEXPR SEMICOLON
+;
+attributeDeclHEADER ::=
+    ATTRIBUTE attributename COLON typIdent {: setStringExpr(true); :}
+;
+
+// METHOD DECLARATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+methodDecl ::= voidMethodDecl | calcMethodDecl;
+voidMethodDecl ::=
+      ACTION attributename COLON AVATARVOIDMETHOD_T LBRAC RBRAC
+    | ACTION attributename COLON AVATARVOIDMETHOD_T LBRAC fieldDecls RBRAC
+;
+calcMethodDecl ::=
+      CALC attributename COLON AVATARCALCMETHOD_T LBRAC RBRAC
+    | CALC attributename COLON AVATARCALCMETHOD_T LBRAC calcMethodItems RBRAC
+;
+calcMethodItems ::=
+      calcMethodItem
+    | calcMethodItem calcMethodItems
+;
+calcMethodItem ::=
+      fieldDecl
+    | RETURN COLON typIdent SEMICOLON
+;
\ No newline at end of file
diff --git a/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jflex b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jflex
index f978d55f3f17aed1c56fd2d17648513887963696..d34257b62bed7a41d6e2e2ebd45b17f22a38d12f 100644
--- a/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jflex
+++ b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jflex
@@ -32,7 +32,8 @@ import java.util.HashSet;
 //  "<="           { return new Symbol(XX#Symb.LEQ, yyline, yycolumn); }
 //  ">="           { return new Symbol(XX#Symb.GEQ, yyline, yycolumn); }
 
-fonctions
+    private boolean getstringexpr = true;
+    public setStringExpr(boolean _b)  { getstringexpr = _b; }
 %}
 
 Space = [\ \n\r\t\f]
@@ -74,6 +75,11 @@ expireTimerChannelName = "'@ch:expire." AvIdent "'"
  [^\n\r]+                   { }
  "\n"                       { yybegin(YYINITIAL); }
 }
+<GETEXPR> {
+ [^;]+ { return new Symbol(XX#Symb.STRINGEXPR, yyline, yycolumn, yytext()); }
+ ";"   { yybegin(YYINITIAL); return new Symbol(XX#Symb.COLON, yyline, yycolumn); }
+}
+
 <YYINITIAL> {
  {Space}        {}
  "//"           { yybegin(COMMENTLINE); }
@@ -93,7 +99,8 @@ expireTimerChannelName = "'@ch:expire." AvIdent "'"
   ":"            { return new Symbol(XX#Symb.COLON, yyline, yycolumn); }
   "."            { return new Symbol(XX#Symb.POINT, yyline, yycolumn); }
   "="            { return new Symbol(XX#Symb.EQUAL, yyline, yycolumn); }
-  ":="           { return new Symbol(XX#Symb.GETS, yyline, yycolumn); }
+  ":="           { if (getstringexpr) yybegin(GETEXPR);
+                   return new Symbol(XX#Symb.GETS, yyline, yycolumn); }
 
   "'@lossy'"        { return new Symbol(XX#Symb.LOSSY_F, yyline, yycolumn); }
   "'@max_size'"     { return new Symbol(XX#Symb.MAXSIZE_F, yyline, yycolumn); }