Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[BUG] kleine foutjes in syntax highlighter

Pagina: 1
Acties:
  • 35 views sinds 30-01-2008

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Er zitten 2 kleine foutjes in syntax highlighter.

Bij java: Floating point getal zonder punt erin wordt niet goed herkend.
Java:
1
2
1e-10
1.0e-10

Bij vb: "False" wordt niet herkend.
Visual Basic:
1
2
3
True
False
If Null Aap Noot Mies ByRef

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:38

crisp

Devver

Pixelated

*noted*

Intentionally left blank


  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

2e bug gefixed in locale code, eerste bug mag crisp ff een fix voor bedenken en daarna zal ik de hele zooi weer eens updaten.

God, root, what is difference? | Talga Vassternich | IBM zuigt


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:38

crisp

Devver

Pixelated

Het matchen van nummers is inderdaad niet helemaal 100 in de java lexer; dit zijn de huidige rules:
code:
1
2
3
4
5
6
7
dig         [0-9]
intpostfix  [Ll]
num1        [\-+]?[1-9]{dig}*({intpostfix}|(\.([eE][\-+]?{dig}+)?[fF]?))?
num2        [\-+]?([1-9]{dig}*)?\.{dig}+([eE][\-+]?{dig}+)?[fF]?
hexnum      [\-+]?0[xX]{hexdig}+{intpostfix}?
octnum      [\-+]?0[0-7]*{intpostfix}?
number      {num1}|{num2}|{hexnum}|{octnum}

Je ziet hier al dat 1e-10 niet matched. Integer 0 wordt gematched als octaal, en 0.0 in feite als een octaal nummer ( 0 ) gevolgd door een float ( .0 )
Dit lijkt mij al beter:
code:
1
2
3
4
5
6
7
8
9
10
dig         [0-9]
long        [Ll]
double      [Dd]
float       [Ff]
exp         [Ee]
int         [\-+]?([1-9]{dig}*|0)({long}|{exp}[\-+]?{dig}+)?
float       [\-+]?([1-9]{dig}*|0)?\.{dig}*({exp}[\-+]?{dig}+)?({double}|{float})?
hexnum      [\-+]?0[xX]{hexdig}+{long}?
octnum      [\-+]?0[0-7]*{long}?
number      {int}|{float}|{hexnum}|{octnum}

maar misschien kan iemand anders ook even kijken of dat wel volledig is :)

edit: mmz, ik vergeet dat 1F en 1e357D ook geldig zijn... morgen nog maar eens kijken :)

[ Voor 15% gewijzigd door crisp op 05-08-2005 00:44 ]

Intentionally left blank


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:38

crisp

Devver

Pixelated

Ah thanks, ik zie dat ik HexadecimalFloatingPointLiteral en BinaryExponent dus ook mee moet nemen :)

Intentionally left blank


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:38

crisp

Devver

Pixelated

dan kom ik hier op uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dig         [0-9]
octdig      [0-7]
hexdig      [0-9A-Fa-f]
long        [Ll]
double      [Dd]
float       [Ff]
exp         [Ee]
binexp      [Pp]
int         [+-]?(0|[1-9]{dig}*)({long}|{exp}[+-]?{dig}+)?
float1      [+-]?(0|[1-9]{dig}*)?\.{dig}*({exp}[+-]?{dig}+)?({double}|{float})?
float2      [+-]?(0|[1-9]{dig}*)({exp}[+-]?{dig}+)?({double}|{float})
hexnum      [+-]?0[xX]{hexdig}+{long}?
hexfloat    [+-]?0[xX]({hexdig}+(\.{hexdig}*)?|\.{hexdig}+){binexp}[+-]?{dig}+({double}|{float})?
octnum      [+-]?0{octdig}+{long}?
number      {int}|{float1}|{float2}|{hexfloat}|{hexnum}|{octnum}

kan wellicht wel wat eenvoudiger geschreven worden nog...

[ Voor 5% gewijzigd door crisp op 05-08-2005 13:38 ]

Intentionally left blank


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Het beste waar ik op uit kom is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
dig         [0-9]
octdig      [0-7]
hexdig      [0-9A-Fa-f]
long        [Ll]
double      [Dd]
float       [Ff]
exp         [Ee]
binexp      [Pp]

int         (0|[1-9]{dig}*){long}?
hexnum      0[xX]{hexdig}+{long}?
octnum      0{octdig}+{long}?

float1      {dig}+\.{dig}*({exp}[+-]?{dig}+)?({double}|{float})?
float2      \.{dig}+({exp}[+-]?{dig}+)?({double}|{float})?
float3      {dig}+{exp}[+-]?{dig}+({double}|{float})?
float4      {dig}+({exp}[+-]?{dig}+)?({double}|{float})
float       {float1}|{float2}|{float3}|{float4}
hexfloat1   0[xX]{hexdig}+\.?{binexp}[+-]?{dig}+({double}|{float})?
hexfloat2   0[xX]{hexdig}*\.{hexdig}+{binexp}[+-]?{dig}+({double}|{float})?
hexfloat    {hexfloat1}|{hexfloat2}

number      {int}|{float}|{hexfloat}|{hexnum}|{octnum}


[edit]
waarschijnlijk kan dit ook:
code:
1
2
3
4
float1      (({dig}+\.{dig}*)|(\.{dig}+))({exp}[+-]?{dig}+)?({double}|{float})?
float2      {dig}+(({exp}[+-]?{dig}+({double}|{float})?)|({double}|{float}))
float       {float1}|{float2}
hexfloat    0[xX](({hexdig}+\.?)|({hexdig}*\.{hexdig}+)){binexp}[+-]?{dig}+({double}|{float})?

[ Voor 24% gewijzigd door Daos op 05-08-2005 14:29 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:38

crisp

Devver

Pixelated

In hoeverre wijkt die af van mijn opzet? oftewel zijn er situaties die in mijn opzet onterecht matchen, of juist niet matchen terwijl dat wel zou moeten?

je mist trouwens over het optionele signteken vooraan.

Intentionally left blank


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Sign staat niet in de specificaties. Het is waarschijnlijk een operator.

hexfloat is goed (sorry).

float:
.e5f mag niet en wordt wel herkend en 1e5 mag wel en wordt niet herkend.

[ Voor 16% gewijzigd door crisp op 05-08-2005 15:21 . Reden: oops, wrong button ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:38

crisp

Devver

Pixelated

1e5 matched wel (als int), .e5f is inderdaad niet correct en matched bij mij wel als float - will fix :)

sign is idd een operator.

edit:
code:
1
float1      [+-]?((0|[1-9]{dig}*)\.{dig}*|\.{dig}+)({exp}[+-]?{dig}+)?({double}|{float})?

zo matched .e5f enzo ook niet meer :)

[ Voor 50% gewijzigd door crisp op 05-08-2005 15:29 ]

Intentionally left blank


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Ik had niet bij int gekeken. Ik dacht dat daar alleen integers herkend werden.

Die getallen zijn nu goed volgens mij.


Verder nog:
Tegenwoordig is er ook een "assert" en "enum" in java.
Java:
1
2
3
4
5
6
7
8
9
10
11
        abstract    continue    for           new          switch
        assert      default     if            package      synchronized
        boolean     do          goto          private      this
        break       double      implements    protected    throw
        byte        else        import        public       throws
        case        enum        instanceof    return       transient
        catch       extends     int           short        try
        char        final       interface     static       void 
        class       finally     long          strictfp     volatile
        const       float       native        super        while      
        true        false       null


Sommige foute characters worden ook herkend:
[code=java]
char[] goed = {'a', '\n', '\112', '\32'};
char[] fout = {'\400', '\c', '\8', '\xff', 'aa', ''};
[/code]


Geldige identifiers
Java:
1
2
3
a123
_123
$123

[ Voor 18% gewijzigd door Daos op 05-08-2005 17:07 . Reden: Ik moet niet overdrijven ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:38

crisp

Devver

Pixelated

Daos schreef op vrijdag 05 augustus 2005 @ 16:31:
Ik had niet bij int gekeken. Ik dacht dat daar alleen integers herkend werden.
syntactisch was het makkelijker om dat daarbij te matchen, maar je hebt gelijk dat het strict genomen geen int is ;)
Die getallen zijn nu goed volgens mij.
mooi, dan kan ik moto-moi daarmee spanken :P
Verder nog:
Tegenwoordig is er ook een "assert" en "enum" in java.
Java:
1
2
3
4
5
6
7
8
9
10
11
        abstract    continue    for           new          switch
        assert      default     if            package      synchronized
        boolean     do          goto          private      this
        break       double      implements    protected    throw
        byte        else        import        public       throws
        case        enum        instanceof    return       transient
        catch       extends     int           short        try
        char        final       interface     static       void 
        class       finally     long          strictfp     volatile
        const       float       native        super        while      
        true        false       null
Dat is makkelijk te fixen :)
Geldige identifiers
Java:
1
2
3
a123
_123
$123
dus identifiers met een dollar-sign gaan nog fout?
Het staat er nu zo in:
code:
1
ident       [A-Za-z_][0-9A-Za-z_$]*

maar zou dus denk ik zo moeten zijn:
code:
1
ident       [A-Za-z_$][0-9A-Za-z_$]*

Intentionally left blank


  • Daos
  • Registratie: Oktober 2004
  • Niet online
crisp schreef op vrijdag 05 augustus 2005 @ 18:53:
[...]

dus identifiers met een dollar-sign gaan nog fout?
Het staat er nu zo in:
code:
1
ident       [A-Za-z_][0-9A-Za-z_$]*

maar zou dus denk ik zo moeten zijn:
code:
1
ident       [A-Za-z_$][0-9A-Za-z_$]*
Dat laatste is goed als je je beperkt tot de Ascii characters.

In java is veel meer toegestaan. Er zijn zelfs speciale functies gemaakt om te kijken of iets bruikbaar is in een identifier. (De tweede functie geeft naast 0-9A-Za-z_$ ook waar bij alle control characters :?)


Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Ident {
  public static void main(String[] args) {
    char end = 127; // ASCII

    //end = Character.MAX_VALUE; // voor als je wilt schrikken

    System.out.println("Identifier mag beginnen met:");
    for (char ch = 0; ch <= end; ch++)
      if (Character.isJavaIdentifierStart(ch))
        System.out.print("\'" + ch + "\' ");
    System.out.println();


    System.out.println("Identifier mag verder bestaan uit:");
    for (char ch = 0; ch <= end; ch++)
      if (Character.isJavaIdentifierPart(ch))
        System.out.print("\'" + ch + "\' ");
    System.out.println();
  }
}

  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

Tino, doe eens je mail beloeren ? :P

God, root, what is difference? | Talga Vassternich | IBM zuigt


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:38

crisp

Devver

Pixelated

Looks good to me :)

Intentionally left blank


  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

Java:
1
2
1e-10
1.0e-10


Visual Basic:
1
2
3
True
False
If Null Aap Noot Mies ByRef


Looks good to me too :P

Java:
1
2
3
4
5
6
7
8
9
10
11
        abstract    continue    for           new          switch
        assert      default     if            package      synchronized
        boolean     do          goto          private      this
        break       double      implements    protected    throw
        byte        else        import        public       throws
        case        enum        instanceof    return       transient
        catch       extends     int           short        try
        char        final       interface     static       void 
        class       finally     long          strictfp     volatile
        const       float       native        super        while      
        true        false       null


Gevalletje 'done' lijkt me :)
Daos, bedankt :)

[ Voor 76% gewijzigd door moto-moi op 09-08-2005 00:06 ]

God, root, what is difference? | Talga Vassternich | IBM zuigt

Pagina: 1

Dit topic is gesloten.