Proc BracketBalance
Parameters line$
Declare c$, u&, d&, str%
WhileLoop len(line$)
c$ = mid$(line$,&Loop,1)
case (c$ = "\q") : str% = If(str% = 0, 1, 0)
If (str% = 0)'nur wenn nicht in einer Zeichenkette
If (c$ = "'") AND (str% = 0)'bei Kommentar ist Schluss
break
EndIf
case (c$ = "(") : inc u&
case (c$ = ")") : inc d&
EndIf
EndWhile
'0 = ok, 1 = Klammern unausgewogen, 2 = Zeichenkette nicht gschlossen, 3 = beides kaputt
return (if(u& <> d&,1,0) + if(str% = 1, 2, 0))
EndProc
declare s1$, s2$, s3$, s4$
s1$ = "Das ist ein (\qguter\q) Test! 'mit Kommentar :-)"
s2$ = "Das ist ein (\qguter) Test! 'mit Kommentar :-)"
s3$ = "Das ist ein (\qguter\q Test! 'mit Kommentar :-)"
s4$ = "Das ist ein (guter) \qTest! 'mit Kommentar :-)"
print BracketBalance(s1$) + " " + s1$'0 = ok
print BracketBalance(s2$) + " " + s2$'3 = beides kaputt (Klammer nur weil zweite ausversehen in Zeichenkette)
print BracketBalance(s3$) + " " + s3$'1 = Klammern unausgewogen
print BracketBalance(s4$) + " " + s4$'2 = Zeichenkette nicht gschlossen
waitinput
end