/************************************************************************** /* This is the JavaCC grammer for a Hello-World example. /* /* Copyright (c) 2004 by Bernhard Bablok (mail@bablokb.de) /* /* This program is free software; you can redistribute it and/or modify /* it under the terms of the GNU General Public License as published /* by the Free Software Foundation; either version 2 of the License or /* (at your option) any later version. /* /* This program is distributed in the hope that it will be useful, but /* WITHOUT ANY WARRANTY; without even the implied warranty of /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the /* GNU General Public License for more details. /* /* You should have received a copy of the GNU General Public License /* along with this program; see the file COPYING. If not, write to /* the Free Software Foundation Inc., 59 Temple Place - Suite 330, /* Boston, MA 02111-1307 USA /**************************************************************************/ options { DEBUG_PARSER = false; DEBUG_TOKEN_MANAGER = false; } PARSER_BEGIN(HelloWorld) package hello; public class HelloWorld { private static String iTitle, iFirstname, iLastname; public static void main(String args[]) throws ParseException { HelloWorld parser = new HelloWorld(System.in); parser.processInput(); parser.doHello(); } private void doHello() { System.out.println("Hello " + iTitle + " " + iFirstname + " " + iLastname); } } PARSER_END(HelloWorld) SKIP : { " " | "\t" | "\n" | "\r" } TOKEN : { < EQ: "="(" ")* >: VALUE | < FIRSTNAME: "Firstname" | "firstname" | "f" > | < LASTNAME: "Lastname" | "lastname" | "l" > | < TITLE: "Title" | "title" | "a" > } TOKEN: { < STRING_LITERAL: (~["\n","\r"])*>:DEFAULT } void processInput() : { } { (keyspec())* } void keyspec() : { } { titleSpec() | firstnameSpec() | lastnameSpec() } void titleSpec() : { } { <EQ> <STRING_LITERAL> { iTitle = getToken(0).image; } } void firstnameSpec() : { } { <FIRSTNAME> <EQ> <STRING_LITERAL> { iFirstname = getToken(0).image; } } void lastnameSpec() : { } { <LASTNAME> <EQ> <STRING_LITERAL> { iLastname = getToken(0).image; } }