Script Parser für C ähnlichen Code Programmieren
Hallo,
Hat jemand eine Grundlegende Idee wie ich C ähnlichen Code parsen kann. Ich arbeite mit Visual Basic aber habe mit C# sample Code auch keine Probleme. Ich erwarte keinen Fertigen Code sondern er par Denkanstöße um selbst die richtige Idee zu bekommen.
Gruß an die IT-Welt,
J Herbrich
Hat jemand eine Grundlegende Idee wie ich C ähnlichen Code parsen kann. Ich arbeite mit Visual Basic aber habe mit C# sample Code auch keine Probleme. Ich erwarte keinen Fertigen Code sondern er par Denkanstöße um selbst die richtige Idee zu bekommen.
Gruß an die IT-Welt,
J Herbrich
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 344660
Url: https://administrator.de/contentid/344660
Ausgedruckt am: 21.11.2024 um 21:11 Uhr
7 Kommentare
Neuester Kommentar
Hi,
ein paar Denkanstöße findest du hier: https://www.staff.uni-giessen.de/~gc1079/compiler/compiler.pdf
Ist jetzt natürlich mehr, als du direkt benötigst, ist auch nur ein Denkanstoß.
ein paar Denkanstöße findest du hier: https://www.staff.uni-giessen.de/~gc1079/compiler/compiler.pdf
Ist jetzt natürlich mehr, als du direkt benötigst, ist auch nur ein Denkanstoß.
Ahso, dann gibt es natürlich noch Antlr3
Wenn ich mich nicht irre dann ist in der aktuellen dotnetpro auch ein guter Artikel dazu drin (diese Information ist allerdings ohne Gewähr).
Wenn ich mich nicht irre dann ist in der aktuellen dotnetpro auch ein guter Artikel dazu drin (diese Information ist allerdings ohne Gewähr).
Wenn Du dir die Arbeitszeit sparen möchtest, kannst Du dir bei mir einen fertigen "Basic-Interpreter" kaufen. Der Interpreter wird als DLL-Datei geliefert und wird sehr einfach mit nur 3 Funktionen in die die eignende Anwendung integriert Hier ein einfaches Code-Beispiel für eine eigende Replace-String (der Aufruf enspricht dem Syntax von VB6 , wie viele Elemente des Interpreters) Funktion:
Function Replace(str, findSubstr, replacement, beginIndex=0, maxCount=-1)
findSubstrLen = Len(findSubstr)
replacementLen = Len(replacement)
count = 0
While count <> maxCount Do
nextSubstrIndex = Find(str, findSubstr, beginIndex)
If nextSubstrIndex = -1 Then
Break
End
str = Mid(str, 0, nextSubstrIndex) _
& replacement _
& Mid(str, nextSubstrIndex + findSubstrLen)
count += 1
beginIndex = nextSubstrIndex + replacementLen _
+ IIf(findSubstrLen = 0, 1, 0)
End
Return str
End
'
'Benötigte Funktionen
'
Function StartsWith(str, start)
Return Mid(str, 0, Len(start)) = start
End
Function EndsWith(str, ending)
If Len(ending) > Len(str) Then
Return False
End
Return Mid(str, Len(str) - Len(ending), Len(ending)) = ending
End
Function Find(str, substr, beginIndex=0)
strLen = Len(str)
substrLen = Len(substr)
For i = beginIndex To strLen - substrLen Do
If Mid(str, i, substrLen) = substr Then
Return i
End
End
Return -1
End
Hier noch ein Beispiel für die matematischen Möglichkeiten:
Const PI = 3.14159265358979
Function Abs(n)
Return IIf(n >= 0, n, -n)
End
Function Sqrt(n)
If n < 0 Then
Return Empty()
ElseIf n = 0 Then
Return n
End
sqrtOfN = 1.0
While Abs(n/sqrtOfN - sqrtOfN) > 0.0001 Do
sqrtOfN = (sqrtOfN + n/sqrtOfN) / 2
End
Return sqrtOfN
End
Function DegToRad(n)
Return n * PI / 180
End
Function RadToDeg(n)
Return n * 180 / PI
End
Function Min(a, b)
Return IIf(a < b, a, b)
End
Function Max(a, b)
Return IIf(a > b, a, b)
End
Function ArrayMin(arr)
minElement = Empty()
ForEach element In arr Do
If element < minElement Then
minElement = element
End
End
Return minElement
End
Function ArrayMax(arr)
maxElement = Empty()
ForEach element In arr Do
If element > maxElement Then
maxElement = element
End
End
Return maxElement
End
Hier ein Beispiel für die Array Funktionen:
' a = ["a", "b", "c", "d", "e"]
Function IsArray(a)
Return VarType(a) = 8204
End
Function ToString(a)
If Not IsArray(a) Then
Return "" & a
Else
r = "(" & Len(a) & ")["
needsComma = False
ForEach aa In a Do
r &= (IIf(needsComma, ", ", "") & ToString(aa))
needsComma = True
End
Return r & "]"
End
End
Function ArraysEqual(a, b)
If Len(a) <> Len(b) Then
Return False
End
For i = 0 To Len(a) - 1
lhsIsArray = IsArray(a[i])
rhsIsArray = IsArray(b[i])
If lhsIsArray <> rhsIsArray Then
Return False
ElseIf lhsIsArray And rhsIsArray Then
If Not ArraysEqual(a[i], b[i]) Then
Return False
End
ElseIf a[i] <> b[i] Then
Return False
End
End
Return True
End
Function ReverseArray(a)
aLen = Len(a)
If aLen <= 1 Then
Return a
End
result = Array(aLen)
For i = 0 To aLen - 1
result[i] = a[aLen - 1 - i]
End
Return result
End
Function NextPermutation(a)
last = Len(a)
If last <= 1 Then
Return [False, a]
End
i = last
i -= 1
While True Do
ii = i
i -= 1
If a[i] < a[ii] Then
j = last
While Not (a[i] < a[j -= 1]) Do
End
tmp = a[i]
a[i] = a[j]
a[j] = tmp
a = Mid(a, 0, ii) & ReverseArray(Mid(a, ii, -1))
Return [True, a]
End
If i = 0 Then
Return [False, ReverseArray(a)]
End
End
End
Function AllPermutations(a)
p = [True, a]
c = 0
While p Do
p((c += 1) & ": " & ToString(p[1]))
p = NextPermutation(p[1])
End
End
Function QuickSort(a)
lo = 0
hi = Len(a) - 1
If hi <= lo Then
Return a
End
pivot = a[hi]
i = lo
For j = lo To hi - 1
If a[j] <= pivot Then
tmp = a[i]
a[i] = a[j]
a[j] = tmp
i += 1
End
End
tmp = a[i]
a[i] = a[hi]
a[hi] = tmp
lpart = QuickSort(Mid(a, 0, i)) & [pivot]
hpart =
If i < hi Then
hpart = QuickSort(Mid(a, i + 1, -1))
End
Return lpart & hpart
End
Function SelectionSort(a)
sortedBegin = Len(a)
While sortedBegin > 0 Do
highestIndex = 0
For i = 0 To sortedBegin - 1 Do
If a[i] >= a[highestIndex] Then
highestIndex = i
End
End
sortedBegin -= 1
tmp = a[highestIndex]
a[highestIndex] = a[sortedBegin]
a[sortedBegin] = tmp
End
Return a
End
Den Interpreter kannst Du mit beliebiegen Funktionen deiner Anwendung erweitern. Die Entwickler-Lizenz geht los bei 2.000 €, bei interesse einfach eine PM an mich!
MFG
Es gibt zu diesem Thema zahlreiche Bücher. Einfach mal bei Amazon "Übersetzerbau" eingeben. Ein Informatik Studium wäre schon ein Vorteil um sich in dieses Thema schnell zu erschliesen.
MfG