if/* First we will test the comments */if
if/* There should be no if that is commented */if
if// End of line comment
if/** Documentation comment */if
if/* multiple
 line
          comment
   */if
if/**
 multiple
 line
    doc comment
   */if
if/* 
 * nice
 * looking
 * comment
 */if
if// /* end of line comment */ more comment
if// /* end of line comment
if// end of line comment */ more comment
if/*back to*//*back*/if
if/*back to*///back
if/**/if
if/***/if
if/****/if
if/*****/if
if/******/if
if/* */if
if/* **/if
if/* ***/if
if/* ****/if
if/** */if
if/** **/if
if/** ***/if
if/** ****/if
if/*** */if
if/**** */if
if/* * */if
if/* ** */if
if/** * */if
if/** ** */if
if/*  * */if
if/*  ** */if
if/**  * */if
if/**  ** */if
if/* * ** *** **** / // /// //// */if
if/** * ** *** **** / // /// //// */if
if/*/*/if
if/*/**/if
if/*/***/if
if/*/****/if
if/*//*/if
if/*//**/if
if/*//***/if
if/*//****/if
if/*\*/if
if/*\\*/if
if// the next line should not be a comment \
if

/* java keywords */
abstract
boolean
break
byte
case
catch
char
class
const
continue
default
do
double
else
extends
final
finally
float
for
goto
if
implements
import
instanceof
int
interface
long
native
new
package
private
protected
public
return
short
static
strictfp
super
switch
synchronized
this
throw
throws
transient
try
void
volatile
while

/* Identifiers */
/**/identifier/**/
/**/a0b1c2d3e4f5g/**/
/**/h6i7j8k9l0mno/**/
/**/pqrstuvwxyz/**/
/**/ABCDEFGHIJK/**/
/**/LMNOPQRSTUVWXYZ/**/
/**/dollar$ign/**/
/**/$tart_with_dollar/**/
/**/under_score/**/
/**/_begin_under_score/**/
/**/unicode\u9877identifier/**/

/* operators and separators */
++operand;
--operand;
expression1=expression2;
expression1*=expression2;
expression1/=expression2;
expression1%=expression2;
expression1+=expression2;
expression1-=expression2;
expression1<<=shift_value;
expression1>>=shift_value;
expression1>>>=shift_value
expression1&=expression2;
expression1^=expression2;
expression1|=expression2;
!operand
~operand
expression1+expression2
expression1-expression2
expression1*expression2
expression1/expression2
expression1%expression2
expression1&expression2
expression1|expression2
expression1^expression2
expression1>>shift_value
expression1<<shift_value
expression1>>>shift_value
expression1&&expression2
expression1||expression2
expression1<expression2
expression1>expression2 
expression1<=expression2 
expression1>=expression2 
expression1==expression2 
expression1!=expression2
expression?expression1:expression2 

++ operand;
-- operand;
expression1 = expression2;
expression1 *= expression2;
expression1 /= expression2;
expression1 %= expression2;
expression1 += expression2;
expression1 -= expression2;
expression1 <<= shift_value;
expression1 >>= shift_value;
expression1 >>>= shift_value
expression1 &= expression2;
expression1 ^= expression2;
expression1 |= expression2;
! operand
~ operand
expression1 + expression2
expression1 - expression2
expression1 * expression2
expression1 / expression2
expression1 % expression2
expression1 & expression2
expression1 | expression2
expression1 ^ expression2
expression1 >> shift_value
expression1 << shift_value
expression1 >>> shift_value
expression1 && expression2
expression1 || expression2
expression1 < expression2 
expression1 > expression2 
expression1 <= expression2 
expression1 >= expression2 
expression1 == expression2 
expression1 != expression2 
expression ? expression1 : expression2

/* separators */
( ) [ ] { } ; , .
// each separator should be its own token
()]{};,.

/* Strings */
"hello","","abcxyz123890ABCXYZ, 	!@#$%^&*(){}?+=|~`'",
"\b\f\n\r\t\'\"\\\0",
// if you are wondering about why some of the following are valid, consider
// "\29" = '\2' + '9'
// "\uFFFFF" = '\uFFFF' + 'F'
"\1\2\03\12\012\111\222\333\08\29\444\u03a9\uFFFF\u03a9a\uFFFFF",
"??-??=??(??)??'??<??>??!??-??a??b??{??}??/8??","?","??","???","??A","??/xDB??/0??/012??/",

/* Characters */
'a','b','c','d','x','y','z','1','2','9','0','A','B','C','D','X','Y','Z',' ','	',
'!','@','#','$','%','^','&','*','(',')','{','}','?','=','+','|','~','`','"',
// escape sequences
'\b','\f','\n','\r','\t','\'','\"','\\','\0',
'\1','\2','\03','\12','\012','\111','\222','\333',
'\023','\u03a9','\uFFFF',

/* Float Literals */
0e0 0d .0 0. 0.0 0.0e0 0.e0 .0e0 0.0e-0 0e0d 0.0e0d 0.0e-0D 0.0e88 0.0e2D
1e1 1d .1 1. 1.1 1.1e1 1.e1 .1e1 1.1e-1 1e0d 1.1e1d 1.1e-1D 3.141592654 6.022e-22
1.79769313486231570e+308 4.94065645841246544e-324
1.0 0.1 1.1 2. .3 4e10 4.e23 8.3e88 2.1e-3 2E2
0f 0e0f 0.0e0F 0.0e-0f 1.1e1f 3.141592654f 6.022e-22f 3.40282347e+38f 1.40239846e-45f

/* Integer Literals */
0 2 1492 2147483647 -2147483648
00 0372 017777777777 020000000000 037777777777 000000000000001
0x0 0xDadaCafe 0x7fffffff 0x80000000 0xffffffff 0x00000000001
0l 0L 76678676L 9223372036854775807L -9223372036854775808L
00L 054325L 0777777777777777777777L 01000000000000000000000L 01777777777777777777777L 0000000000000000000000000001L
0x0L 0xfeeddeadbeefL 0x8000000000000000L 0x7fffffffffffffffL 0xffffffffffffffffL 0x0000ffffffffffffffL

/* Other Literals */
null
true
false

/* Errors 
 * 
 * Anything after this has some sort of error associated with it.
 * Since there is no standard definition of what an error is or how
 * recovery after errors should be done, there is no standard way to 
 * display errors.  However, if one of the errors gets reported as 
 * valid that is a problem.
 */ 

/* Identifier Errors */
/**/1cannot_start_with_number/**/
/**/weird`character/**/
/**/weird#character/**/
/**/weird@character/**/
/**/bad\uFFFunicode/**/

/* String Errors */
/**/"\A"/**/
/**/"\N"/**/
/**/"unclosed/**/
/**/"\"unclosed/**/
/**/"\8"/**/
/**/"\xGG"/**/
/**/"\uFFF"/**/
/**/"\uhhhh"/**/
/**/"\uuc0c0"/**/

/* Character Errors */
/**/'string'/**/
/**/'\A'/**/
/**/'\N'/**/
/**/'unclosed/**/
/**/'''unclosed/**/
/**/'\'closed'/**/
/**/'\'unclosed/**/
/**/'\8'/**/
/**/'\29'/**/
/**/'\444'/**/
/**/'\1111'/**/
/**/'\xFFF'/**/
/**/'\xGG'/**/
/**/'\x000'/**/
/**/'\x111'/**/
/**/'??a'/**/
/**/'??"'/**/
/**/'??}'/**/
/**/'??/'/**/
/**/'??/444'/**/
/**/'\uFFF'/**/
/**/'\uFFFFF'/**/
/**/'\uu'/**/
/**/'\u0'/**/
/**/'\xFF'/**/
/**/'??-'/**/
/**/'??='/**/
/**/'??('/**/
/**/'??)'/**/
/**/'??/0'/**/
/**/'??/xDB'/**/
/**/'??/XDB'/**/
/**/'??/012'/**/
/**/'??/'/**/
/**/'??'/**/
/**/'??<'/**/
/**/'??>'/**/
/**/'??!'/**/
/**/'??-'/**/
/**/'\a'/**/
/**/'\v'/**/
/**/'\?'/**/

/* Float Literal Errors */
/**/0e/**/
/**/88.8e/**/
/**/1.3L/**/
/**/1.3l/**/

/* Integer Literal Errors */
/**/08/**/
/**/09/**/
/**/0xg/**/
/**/0xG/**/
/**/3u/**/
/**/3U/**/
/**/3ul/**/
/**/3Ul/**/
/**/3uL/**/
/**/3UL/**/
/**/3lu/**/
/**/3lU/**/
/**/3Lu/**/
/**/3LU/**/
// the rest are errors on the bounds
// Sun Microsystem has a few bugs in the parse methods
// from strings to numbers,
// so some of these may be incorrectly accepted
/**/5 - 2147483648/**/
/**/214748364/**/
/**/-2147483649/**/
/**/077777777777/**/
/**/010000000000/**/
/**/0x100000000/**/
/**/9223372036854775808L/**/
/**/-9223372036854775809L/**/
/**/5 - 9223372036854775808L/**/
/**/02000000000000000000000L/**/
/**/07777777777777777777777L/**/
/**/0x10000000000000000L/**/
/**/1.79769313486231571e+308/**/
/**/1.79769313486231570e+309/**/
/**/4.94065645841246543e-324/**/
/**/4.94065645841246544e-325/**/
/**/3.40282348e+38f/**/
/**/3.40282347e+39f/**/
/**/1.40239845e-45f/**/
/**/1.40239846e-46f/**/
/**/1.79769313486232570e+308/**/
/**/2.94065645841245544e-324/**/
/**/3.40283347e+38f/**/
/**/1.40220846e-45f/**/

/* Unterminated comment at eof