Lexer für PB 4

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Ok, der war einfach :) Hab nur vergessen, irgendwo den Typ zu setzen...
Ist gleich editiert (im ersten Post).
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Danke.

Wenn ich mich ranhalte bin ich morgen oder Montag fertig ;-)
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Kann das sein das SetFileString nicht mit 'carriage return' umgehen kann ?
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Jap, darf nur #LF$ vorkommen ->

Code: Alles auswählen

File.s = ReplaceString(File.s, #CR$, #LF$)
File.s = ReplaceString(File.s, #LF$+#LF$, #LF$)
wirds wohl tun. Hab diese Zeilen nicht eingebaut, da sie doch recht viel
Zeit benötigen, auch wenns nicht nötig wäre.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Mikro-Bugfix
1E3 wurde nicht richtig erkannt...
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Hi Remi,

ist es moeglich alle Leerzeichen stehen zu lassen,
oder die Startposition des Tokens zu bekommen ?
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Sollte möglich sein mit diesen Modifikationen (Tabs und Spaces werden
dann als #PBSC_OTHER einzeln zurückgegeben):

- Hinzufügen dieser 3 Zeilen am Anfang von _PBSC_GetNumber() direkt
nach den Variablendeklarationen:

Code: Alles auswählen

  If PeekC(@s) = ' ' Or PeekC(@s) = 9
    ProcedureReturn 0
  EndIf
- Entfernen aller _PBSC_Trim()s, führt zu dieser Prozedur:

Code: Alles auswählen

Procedure.s PBSC_GetNextToken(*this.cPBSC)
  Protected s0.s, Token.s, Len.l
  
  If *this\File And (*this\FileLine <= *this\FileMaxLine Or Len(*this\Line) <> 0)
    
    If *this\Line = ""
      _PBSC_SetTokenType(*this, #PBSC_NewLine)
      _PBSC_SetLastToken(*this, #LF$)
      
      s0 = _PBSC_ReadLine(*this)
      *this\Line = s0;_PBSC_Trim(*this, s0)
      
      If ( Not *this\Started) Or (*this\Started And *this\Line = "")
        ProcedureReturn #LF$
      Else
        *this\Started = #False
      EndIf
    EndIf
    
    Len = _PBSC_FindToken(*this.cPBSC, *this\Line)
    Token = Left(*this\Line, Len)
    
    *this\Line = Mid(*this\Line, FindString(*this\Line, Token, 1)+Len(Token), Len(*this\Line)-Len(Token));_PBSC_Trim(*this, Mid(*this\Line, FindString(*this\Line, Token, 1)+Len(Token), Len(*this\Line)-Len(Token)))
    
    ProcedureReturn Token;_PBSC_Trim(*this, Token)
  Else
    ProcedureReturn ""
  EndIf
EndProcedure
Hab es aber nicht gross getestet. Die Startposition zu erfahren wäre etwas
kompliziert.

greetz
Remi
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Oups , fast vergessen mich zu bedanken :D

Danke.

Bis auf einen Fehler mit den Konstanten (den ich jetzt hoffentlich
draussen habe), klappt das sehr gut. :allright:
Benutzeravatar
Didelphodon
Beiträge: 360
Registriert: 18.12.2004 13:03
Wohnort: Wien
Kontaktdaten:

Beitrag von Didelphodon »

@remi: Danke für Deine hervorragende Arbeit, ich kann das Teil echt super für meine PBE-Agenden gebrauchen! :D
Das Leben ist ein sch*** Spiel, aber die Grafik ist irre!
Fighting for peace is like fuc*ing for virginity!
Benutzeravatar
inc.
Beiträge: 348
Registriert: 27.10.2004 12:25

Beitrag von inc. »

Bug Report:

in der Prozedur "_PBSC_GetIdentifier" , welche die Konstanten & Pointer erkennt fehlen die Identifier "width", "includefile" und "xincludefile".

Fehler bei folgendem Code:

Code: Alles auswählen

Macro __VERTEXFLAGS(__Texnum) 
  If(VertexBufferType & #GRAPH_VB_TEXTURE_COORDINATES_#__Texnum) 
    VertexSize + 8 ;2*FLOAT 
  EndIf 
EndMacro
Hier wird

"#GRAPH_VB_TEXTURE_COORDINATES_#__Texnum"

in ...

"#GRAPH_VB_TEXTURE_COORDINATES_"
"#"
"__Texnum"

aufgeteilt.
Hier gibts die OOP Option für PureBasic.
Antworten