Defining string java cup/jflex

Discussion in 'Java' started by lionelv@gmail.com, Feb 8, 2007.

  1. Guest

    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.
    , Feb 8, 2007
    #1
    1. Advertising

  2. Oliver Wong Guest

    <> wrote in message
    news:...
    > 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.

    [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
    Oliver Wong, Feb 12, 2007
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. mukuta

    coffee cup html

    mukuta, Oct 27, 2003, in forum: HTML
    Replies:
    5
    Views:
    732
    Nicolai P. Zwar
    Oct 28, 2003
  2. Michael De Tomaso

    bottomless cup of coffee

    Michael De Tomaso, Apr 13, 2005, in forum: HTML
    Replies:
    11
    Views:
    987
    Blinky the Shark
    Apr 15, 2005
  3. Kevin
    Replies:
    3
    Views:
    530
    Dimitri Ognibene
    May 3, 2006
  4. Replies:
    0
    Views:
    459
  5. macabstract
    Replies:
    7
    Views:
    268
    Richard Cornford
    May 25, 2006
Loading...

Share This Page