---input---
int func1(int x, int y)
    /*@requires y >= 0*/
{
    return x / y;
}


int func2(int x, int y)    //@requires y >= 0;
{
    return x / y;
}


void func3()
//#test{};
{
    fun(2,3)//test1;
    ;
}


int func4(int x, int y)
    /*@requires y >= 0;*/
{
    return x / y;
}


int func5(int x, int y)
    /*@requires y >= 0
    {
        return x / y;
    }
    */
   {
       return 2;
   }


//@requires y >= 0;
//@requires y >= 0
/*
calling(2,5)
*/
/*
calling(2,5);
*/
int func6(int x, int y)
    //@requires y >= 0
    //@requires y >= 0;
    /*
    hello(2,3);
    */
    /*
    hello(2,3)
    */
    {
        // haha(2,3);
        return x / y;
        /*
        callblabla(x, y);
        */
    }
//@requires y >= 0;
//@requires y >= 0
/*
calling(2,5)
*/
/*
calling(2,5);
*/


int * //@# a pointer to int
func7 /* @# why a comment here?  */ (
  int /* the index has to be an int */ a, // index into the array
  int *b    //the array @!
)
/*
    The end of the func params @ (@ will result error if parsed incorrectly)
*/
{
  // yet another comment
  return b[a];
}

---tokens---
'int'         Keyword.Type
' '           Text.Whitespace
'func1'       Name.Function
'('           Punctuation
'int'         Keyword.Type
' '           Text.Whitespace
'x'           Name
','           Punctuation
' '           Text.Whitespace
'int'         Keyword.Type
' '           Text.Whitespace
'y'           Name
')'           Punctuation
'\n'          Text.Whitespace

'    '        Text.Whitespace
'/*@requires y >= 0*/' Comment.Multiline
'\n'          Text.Whitespace

'{'           Punctuation
'\n'          Text.Whitespace

'    '        Text.Whitespace
'return'      Keyword
' '           Text.Whitespace
'x'           Name
' '           Text.Whitespace
'/'           Operator
' '           Text.Whitespace
'y'           Name
';'           Punctuation
'\n'          Text.Whitespace

'}'           Punctuation
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'\n'          Text.Whitespace

'int'         Keyword.Type
' '           Text.Whitespace
'func2'       Name.Function
'('           Punctuation
'int'         Keyword.Type
' '           Text.Whitespace
'x'           Name
','           Punctuation
' '           Text.Whitespace
'int'         Keyword.Type
' '           Text.Whitespace
'y'           Name
')'           Punctuation
'    '        Text.Whitespace
'//@requires y >= 0;\n' Comment.Single

'{'           Punctuation
'\n'          Text.Whitespace

'    '        Text.Whitespace
'return'      Keyword
' '           Text.Whitespace
'x'           Name
' '           Text.Whitespace
'/'           Operator
' '           Text.Whitespace
'y'           Name
';'           Punctuation
'\n'          Text.Whitespace

'}'           Punctuation
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'\n'          Text.Whitespace

'void'        Keyword.Type
' '           Text.Whitespace
'func3'       Name.Function
'('           Punctuation
')'           Punctuation
'\n'          Text.Whitespace

'//#test{};\n' Comment.Single

'{'           Punctuation
'\n'          Text.Whitespace

'    '        Text.Whitespace
'fun'         Name
'('           Punctuation
'2'           Literal.Number.Integer
','           Punctuation
'3'           Literal.Number.Integer
')'           Punctuation
'//test1;\n'  Comment.Single

'    '        Text.Whitespace
';'           Punctuation
'\n'          Text.Whitespace

'}'           Punctuation
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'\n'          Text.Whitespace

'int'         Keyword.Type
' '           Text.Whitespace
'func4'       Name.Function
'('           Punctuation
'int'         Keyword.Type
' '           Text.Whitespace
'x'           Name
','           Punctuation
' '           Text.Whitespace
'int'         Keyword.Type
' '           Text.Whitespace
'y'           Name
')'           Punctuation
'\n'          Text.Whitespace

'    '        Text.Whitespace
'/*@requires y >= 0;*/' Comment.Multiline
'\n'          Text.Whitespace

'{'           Punctuation
'\n'          Text.Whitespace

'    '        Text.Whitespace
'return'      Keyword
' '           Text.Whitespace
'x'           Name
' '           Text.Whitespace
'/'           Operator
' '           Text.Whitespace
'y'           Name
';'           Punctuation
'\n'          Text.Whitespace

'}'           Punctuation
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'\n'          Text.Whitespace

'int'         Keyword.Type
' '           Text.Whitespace
'func5'       Name.Function
'('           Punctuation
'int'         Keyword.Type
' '           Text.Whitespace
'x'           Name
','           Punctuation
' '           Text.Whitespace
'int'         Keyword.Type
' '           Text.Whitespace
'y'           Name
')'           Punctuation
'\n'          Text.Whitespace

'    '        Text.Whitespace
'/*@requires y >= 0\n    {\n        return x / y;\n    }\n    */' Comment.Multiline
'\n'          Text.Whitespace

'   '         Text.Whitespace
'{'           Punctuation
'\n'          Text.Whitespace

'       '     Text.Whitespace
'return'      Keyword
' '           Text.Whitespace
'2'           Literal.Number.Integer
';'           Punctuation
'\n'          Text.Whitespace

'   '         Text.Whitespace
'}'           Punctuation
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'\n'          Text.Whitespace

'//@requires y >= 0;\n' Comment.Single

'//@requires y >= 0\n' Comment.Single

'/*\ncalling(2,5)\n*/' Comment.Multiline
'\n'          Text.Whitespace

'/*\ncalling(2,5);\n*/' Comment.Multiline
'\n'          Text.Whitespace

'int'         Keyword.Type
' '           Text.Whitespace
'func6'       Name.Function
'('           Punctuation
'int'         Keyword.Type
' '           Text.Whitespace
'x'           Name
','           Punctuation
' '           Text.Whitespace
'int'         Keyword.Type
' '           Text.Whitespace
'y'           Name
')'           Punctuation
'\n'          Text.Whitespace

'    '        Text.Whitespace
'//@requires y >= 0\n' Comment.Single

'    '        Text.Whitespace
'//@requires y >= 0;\n' Comment.Single

'    '        Text.Whitespace
'/*\n    hello(2,3);\n    */' Comment.Multiline
'\n'          Text.Whitespace

'    '        Text.Whitespace
'/*\n    hello(2,3)\n    */' Comment.Multiline
'\n'          Text.Whitespace

'    '        Text.Whitespace
'{'           Punctuation
'\n'          Text.Whitespace

'        '    Text.Whitespace
'// haha(2,3);\n' Comment.Single

'        '    Text.Whitespace
'return'      Keyword
' '           Text.Whitespace
'x'           Name
' '           Text.Whitespace
'/'           Operator
' '           Text.Whitespace
'y'           Name
';'           Punctuation
'\n'          Text.Whitespace

'        '    Text.Whitespace
'/*\n        callblabla(x, y);\n        */' Comment.Multiline
'\n'          Text.Whitespace

'    '        Text.Whitespace
'}'           Punctuation
'\n'          Text.Whitespace

'//@requires y >= 0;\n' Comment.Single

'//@requires y >= 0\n' Comment.Single

'/*\ncalling(2,5)\n*/' Comment.Multiline
'\n'          Text.Whitespace

'/*\ncalling(2,5);\n*/' Comment.Multiline
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'\n'          Text.Whitespace

'int'         Keyword.Type
' '           Text.Whitespace
'*'           Operator
' '           Text.Whitespace
'//@# a pointer to int\n' Comment.Single

'func7'       Name.Function
' '           Text.Whitespace
'/* @# why a comment here?  */' Comment.Multiline
' '           Text.Whitespace
'('           Punctuation
'\n'          Text.Whitespace

'  '          Text.Whitespace
'int'         Keyword.Type
' '           Text.Whitespace
'/* the index has to be an int */' Comment.Multiline
' '           Text.Whitespace
'a'           Name
','           Punctuation
' '           Text.Whitespace
'// index into the array\n' Comment.Single

'  '          Text.Whitespace
'int'         Keyword.Type
' '           Text.Whitespace
'*'           Operator
'b'           Name
'    '        Text.Whitespace
'//the array @!\n' Comment.Single

')'           Punctuation
'\n'          Text.Whitespace

'/*\n    The end of the func params @ (@ will result error if parsed incorrectly)\n*/' Comment.Multiline
'\n'          Text.Whitespace

'{'           Punctuation
'\n'          Text.Whitespace

'  '          Text.Whitespace
'// yet another comment\n' Comment.Single

'  '          Text.Whitespace
'return'      Keyword
' '           Text.Whitespace
'b'           Name
'['           Punctuation
'a'           Name
']'           Punctuation
';'           Punctuation
'\n'          Text.Whitespace

'}'           Punctuation
'\n'          Text.Whitespace
