Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / February 2007

Tip: Looking for answers? Try searching our database.

Defining string java cup/jflex

Thread view: 
lionelv@gmail.com - 08 Feb 2007 07:03 GMT
Maybe someone here can help with this.

I'm a newbie to cup/jflex and I'm having some troubles. I'm starting
with an example I found somewhere and modifying it slowly to get the
desired result. I want to allow strings, eventually between braces
{aString}  but for now I've been trying between quotes as the examples
do it this way. In the following "comment" is a keyword:

4+8;
comment "aString";

Here is the code that I have modified:

Scanner.jflex

*************************************
package Example;

import java_cup.runtime.SymbolFactory;
%%
%cup
%class Scanner
%{
    public Scanner(java.io.InputStream r, SymbolFactory sf){
        this(r);
        this.sf=sf;
    }
     StringBuffer string = new StringBuffer();
    private SymbolFactory sf;
%}
%eofval{
   return sf.newSymbol("EOF",sym.EOF);
%eofval}

%state STRING

%%
";" { return sf.newSymbol("Semicolon",sym.SEMI); }
"+" { return sf.newSymbol("Plus",sym.PLUS); }
"*" { return sf.newSymbol("Times",sym.TIMES); }
"(" { return sf.newSymbol("Left Bracket",sym.LPAREN); }
")" { return sf.newSymbol("Right Bracket",sym.RPAREN); }
[0-9]+ { return sf.newSymbol("Integral Number",sym.NUMBER, new
Integer(yytext())); }
[ \t\r\n\f] { /* ignore white space. */ }
. { System.err.println("Illegal character: "+yytext()); }

\" { string.setLength(0); yybegin(STRING);  }

<YYINITIAL> "comment" { return sf.newSymbol("Comment", sym.COMMENT); }

<STRING> {
 \"                             { yybegin(YYINITIAL);
                                  return symbol(sym.STRING_LITERAL,
                                  string.toString()); }
 [^\n\r\"\\]+                   { string.append( yytext() ); }
 \\t                            { string.append('\t'); }
 \\n                            { string.append('\n'); }

 \\r                            { string.append('\r'); }
 \\\"                           { string.append('\"'); }
 \\                             { string.append('\\'); }
}

*************************************

Parser.cup

*************************************
package Example;

import java_cup.runtime.*;

parser code {:
    public static void main(String args[]) throws Exception {
        SymbolFactory sf = new ComplexSymbolFactory();
        if (args.length==0) new Parser(new
Scanner(System.in,sf),sf).parse();
        else new Parser(new Scanner(new
java.io.FileInputStream(args[0]),sf),sf).parse();
    }
:}

terminal COMMENT;
terminal String STRING;
terminal SEMI, PLUS, TIMES, LPAREN, RPAREN;
terminal Integer NUMBER;

non terminal expr_list, expr_part, type_data;
non terminal Integer expr;

precedence left PLUS;
precedence left TIMES;

expr_list ::= expr_list expr_part | expr_part | expr_list type_data;
expr_part ::= expr:e {: System.out.println(" = "+e+";"); :} SEMI;
expr      ::= NUMBER:n
         {: RESULT=n; :}
           | expr:l PLUS expr:r
         {: RESULT=new Integer(l.intValue() + r.intValue()); :}
       | expr:l TIMES expr:r
         {: RESULT=new Integer(l.intValue() * r.intValue()); :}
       | LPAREN expr:e RPAREN
         {: RESULT=e; :}
       ;
type_data ::= COMMENT {: System.out.println("bar"); :} STRING:str {:
System.out.println(str); :} SEMI;

*************************************

The above code once I run it on the lines a gave gives a syntax error
and complains about illegal characters " a S t r i n g and "

What am I doing wrong and where should I start learning about this?

thanks

Lionel.
Oliver Wong - 12 Feb 2007 16:07 GMT
> Maybe someone here can help with this.
>
[quoted text clipped - 3 lines]
> {aString}  but for now I've been trying between quotes as the examples
> do it this way.
[code snipped]

> The above code once I run it on the lines a gave gives a syntax error
> and complains about illegal characters " a S t r i n g and "
>
> What am I doing wrong and where should I start learning about this?

   Is your goal to learn cup/jflex, or is it to write your own parser? If
it's the latter, I recommend you use a different parser generator, since
from the lack of response, it sounds like most people don't know cup/jflex's
syntax. Try ANTLR, for example. They have a very active mailing list and so
someone will probably answer your questions.

   If it's the former... well... good luck.

   - Oliver


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.