Ignore:
Timestamp:
2011-02-07T16:05:37+01:00 (15 years ago)
Author:
bastiK
Message:

mapcss: parser improvements

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/parser/MapCSSParser.jj

    r3863 r3867  
    4848|   < LPAR: "(" >
    4949|   < RPAR: ")" >
     50|   < GREATER_EQUAL: ">=" >
     51|   < LESS_EQUAL: "<=" >
     52|   < GREATER: ">" >
     53|   < LESS: "<" >
    5054|   < EQUAL: "=" >
    5155|   < EXCLAMATION: "!" >
     
    188192    { this.sheet = sheet; }
    189193    w()
    190     ( r=rule() { sheet.rules.add(r); } w() )*
     194    ( r=rule() { if (r != null) { sheet.rules.add(r); } } w() )*
    191195    <EOF>
    192196}
     
    199203}
    200204{
    201     sel=selector() { selectors.add(sel); } w()
    202     (
    203         <COMMA> w()
     205    try {
    204206        sel=selector() { selectors.add(sel); } w()
    205     )*
     207        (
     208            <COMMA> w()
     209            sel=selector() { selectors.add(sel); } w()
     210        )*
     211    } catch (ParseException ex) {
     212        error_skipto(RBRACE);
     213        return null;
     214    }
    206215    decl=declaration()
    207216    { return new MapCSSRule(selectors, decl); }
     
    298307}
    299308{
    300     <DCOLON>
     309    ( <SLASH> | <DCOLON> )
    301310    ( t=<IDENT> | t=<STAR> )
    302311    { return t.image; }
     
    354363}
    355364{
    356     e=primary() { args.add(e); } w()
    357365    (
    358             ( <PLUS> { op = "plus"; } w() e=primary() { args.add(e); } w() )+
    359         |
    360             ( <STAR> { op = "times"; } w() e=primary() { args.add(e); } w() )+
    361         |
    362             ( <MINUS> { op = "minus"; } w() e=primary() { args.add(e); } w() )+
    363         |
    364             ( <SLASH> { op = "divided_by"; } w() e=primary() { args.add(e); } w() )+
    365         |
    366             ( <AMPERSAND> <AMPERSAND> { op = "and"; } w() e=primary() { args.add(e); } w() )
    367         |
    368             ( <PIPE> <PIPE> { op = "or"; } w() e=primary() { args.add(e); } w() )
    369         |
    370             ( <QUESTION> { op = "cond"; } w() e=primary() { args.add(e); } w() <COLON> w() e=primary() { args.add(e); } w() )
    371     )?
     366        ( <EXCLAMATION> { op = "not"; } w() e=primary() { args.add(e); } w() )
     367    |
     368        ( <MINUS> { op = "minus"; } w() e=primary() { args.add(e); } w() )
     369    |
     370   
     371        (
     372            e=primary() { args.add(e); } w()
     373            (
     374                    ( <PLUS> { op = "plus"; } w() e=primary() { args.add(e); } w() )+
     375                |
     376                    ( <STAR> { op = "times"; } w() e=primary() { args.add(e); } w() )+
     377                |
     378                    ( <MINUS> { op = "minus"; } w() e=primary() { args.add(e); } w() )+
     379                |
     380                    ( <SLASH> { op = "divided_by"; } w() e=primary() { args.add(e); } w() )+
     381                |
     382                    ( <GREATER_EQUAL> { op = "greater_equal"; } w() e=primary() { args.add(e); } w() )
     383                |
     384                    ( <LESS_EQUAL> { op = "less_equal"; } w() e=primary() { args.add(e); } w() )
     385                |
     386                    ( <GREATER> { op = "greater"; } w() e=primary() { args.add(e); } w() )
     387                |
     388                    ( <EQUAL> ( <EQUAL> )? { op = "equal"; } w() e=primary() { args.add(e); } w() )
     389                |
     390                    ( <LESS> { op = "less"; } w() e=primary() { args.add(e); } w() )
     391                |
     392                    ( <AMPERSAND> <AMPERSAND> { op = "and"; } w() e=primary() { args.add(e); } w() )
     393                |
     394                    ( <PIPE> <PIPE> { op = "or"; } w() e=primary() { args.add(e); } w() )
     395                |
     396                    ( <QUESTION> { op = "cond"; } w() e=primary() { args.add(e); } w() <COLON> w() e=primary() { args.add(e); } w() )
     397            )?
     398        )
     399    )
    372400    {
    373401        if (op == null)
     
    420448    |
    421449        ( <PLUS> f=ufloat() ) { return new Instruction.RelativeFloat(f); }
    422     |
    423         ( <MINUS> f=ufloat() ) { return -f; }
    424450    |
    425451        f=ufloat() { return f; }
     
    447473    do {
    448474        t = getNextToken();
    449     } while (t.kind != kind);
    450 }
    451 
     475    } while (t.kind != kind && t.kind != EOF);
     476    if (t.kind == EOF)
     477        throw new ParseException("Reached end of file while parsing");
     478}
     479
Note: See TracChangeset for help on using the changeset viewer.