grammar catalog; catalog : item* ; item : 'item' name require* ; name : STRING; require : 'requires' resource; resource : (acid | electricity) ; electricity : 'electricity' NUMBER; acid : 'acid' acidType grade; acidType : ('hcl' | 'hno3'); grade : NUMBER; /*------------------------------------------------------------------ * LEXER RULES *------------------------------------------------------------------*/ NUMBER : (DIGIT)+ ; WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { channel = 99; } ; fragment DIGIT : '0'..'9' ; STRING : (LETTER)+; LETTER : 'a'..'z';