Skip to content

Commit d122d30

Browse files
Jos512alecthomas
authored andcommitted
Add ABAP lexer
1 parent b964bce commit d122d30

4 files changed

Lines changed: 327 additions & 1 deletion

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ translators for Pygments lexers and styles.
3535

3636
Prefix | Language
3737
:----: | --------
38-
A | ABNF, ActionScript, ActionScript 3, Ada, Angular2, ANTLR, ApacheConf, APL, AppleScript, Arduino, Awk
38+
A | ABAP, ABNF, ActionScript, ActionScript 3, Ada, Angular2, ANTLR, ApacheConf, APL, AppleScript, Arduino, Awk
3939
B | Ballerina, Base Makefile, Bash, Batchfile, BlitzBasic, BNF, Brainfuck
4040
C | C, C#, C++, Cap'n Proto, Cassandra CQL, Ceylon, CFEngine3, cfstatement, ChaiScript, Cheetah, Clojure, CMake, COBOL, CoffeeScript, Common Lisp, Coq, Crystal, CSS, Cython
4141
D | D, Dart, Diff, Django/Jinja, Docker, DTD

lexers/a/abap.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package a
2+
3+
import (
4+
. "github.com/alecthomas/chroma" // nolint
5+
"github.com/alecthomas/chroma/lexers/internal"
6+
)
7+
8+
// ABAP lexer.
9+
var Abap = internal.Register(MustNewLexer(
10+
&Config{
11+
Name: "ABAP",
12+
Aliases: []string{"abap"},
13+
Filenames: []string{"*.abap", "*.ABAP"},
14+
MimeTypes: []string{"text/x-abap"},
15+
CaseInsensitive: true,
16+
},
17+
Rules{
18+
"common": {
19+
{`\s+`, Text, nil},
20+
{`^\*.*$`, CommentSingle, nil},
21+
{`\".*?\n`, CommentSingle, nil},
22+
{`##\w+`, CommentSpecial, nil},
23+
},
24+
"variable-names": {
25+
{`<\S+>`, NameVariable, nil},
26+
{`\w[\w~]*(?:(\[\])|->\*)?`, NameVariable, nil},
27+
},
28+
"root": {
29+
Include("common"),
30+
{`CALL\s+(?:BADI|CUSTOMER-FUNCTION|FUNCTION)`, Keyword, nil},
31+
{`(CALL\s+(?:DIALOG|SCREEN|SUBSCREEN|SELECTION-SCREEN|TRANSACTION|TRANSFORMATION))\b`, Keyword, nil},
32+
{`(FORM|PERFORM)(\s+)(\w+)`, ByGroups(Keyword, Text, NameFunction), nil},
33+
{`(PERFORM)(\s+)(\()(\w+)(\))`, ByGroups(Keyword, Text, Punctuation, NameVariable, Punctuation), nil},
34+
{`(MODULE)(\s+)(\S+)(\s+)(INPUT|OUTPUT)`, ByGroups(Keyword, Text, NameFunction, Text, Keyword), nil},
35+
{`(METHOD)(\s+)([\w~]+)`, ByGroups(Keyword, Text, NameFunction), nil},
36+
{`(\s+)([\w\-]+)([=\-]>)([\w\-~]+)`, ByGroups(Text, NameVariable, Operator, NameFunction), nil},
37+
{`(?<=(=|-)>)([\w\-~]+)(?=\()`, NameFunction, nil},
38+
{`(TEXT)(-)(\d{3})`, ByGroups(Keyword, Punctuation, LiteralNumberInteger), nil},
39+
{`(TEXT)(-)(\w{3})`, ByGroups(Keyword, Punctuation, NameVariable), nil},
40+
{`(ADD-CORRESPONDING|AUTHORITY-CHECK|CLASS-DATA|CLASS-EVENTS|CLASS-METHODS|CLASS-POOL|DELETE-ADJACENT|DIVIDE-CORRESPONDING|EDITOR-CALL|ENHANCEMENT-POINT|ENHANCEMENT-SECTION|EXIT-COMMAND|FIELD-GROUPS|FIELD-SYMBOLS|FUNCTION-POOL|INTERFACE-POOL|INVERTED-DATE|LOAD-OF-PROGRAM|LOG-POINT|MESSAGE-ID|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|NEW-LINE|NEW-PAGE|NEW-SECTION|NO-EXTENSION|OUTPUT-LENGTH|PRINT-CONTROL|SELECT-OPTIONS|START-OF-SELECTION|SUBTRACT-CORRESPONDING|SYNTAX-CHECK|SYSTEM-EXCEPTIONS|TYPE-POOL|TYPE-POOLS|NO-DISPLAY)\b`, Keyword, nil},
41+
{`(?<![-\>])(CREATE\s+(PUBLIC|PRIVATE|DATA|OBJECT)|(PUBLIC|PRIVATE|PROTECTED)\s+SECTION|(TYPE|LIKE)\s+((LINE\s+OF|REF\s+TO|(SORTED|STANDARD|HASHED)\s+TABLE\s+OF))?|FROM\s+(DATABASE|MEMORY)|CALL\s+METHOD|(GROUP|ORDER) BY|HAVING|SEPARATED BY|GET\s+(BADI|BIT|CURSOR|DATASET|LOCALE|PARAMETER|PF-STATUS|(PROPERTY|REFERENCE)\s+OF|RUN\s+TIME|TIME\s+(STAMP)?)?|SET\s+(BIT|BLANK\s+LINES|COUNTRY|CURSOR|DATASET|EXTENDED\s+CHECK|HANDLER|HOLD\s+DATA|LANGUAGE|LEFT\s+SCROLL-BOUNDARY|LOCALE|MARGIN|PARAMETER|PF-STATUS|PROPERTY\s+OF|RUN\s+TIME\s+(ANALYZER|CLOCK\s+RESOLUTION)|SCREEN|TITLEBAR|UPADTE\s+TASK\s+LOCAL|USER-COMMAND)|CONVERT\s+((INVERTED-)?DATE|TIME|TIME\s+STAMP|TEXT)|(CLOSE|OPEN)\s+(DATASET|CURSOR)|(TO|FROM)\s+(DATA BUFFER|INTERNAL TABLE|MEMORY ID|DATABASE|SHARED\s+(MEMORY|BUFFER))|DESCRIBE\s+(DISTANCE\s+BETWEEN|FIELD|LIST|TABLE)|FREE\s(MEMORY|OBJECT)?|PROCESS\s+(BEFORE\s+OUTPUT|AFTER\s+INPUT|ON\s+(VALUE-REQUEST|HELP-REQUEST))|AT\s+(LINE-SELECTION|USER-COMMAND|END\s+OF|NEW)|AT\s+SELECTION-SCREEN(\s+(ON(\s+(BLOCK|(HELP|VALUE)-REQUEST\s+FOR|END\s+OF|RADIOBUTTON\s+GROUP))?|OUTPUT))?|SELECTION-SCREEN:?\s+((BEGIN|END)\s+OF\s+((TABBED\s+)?BLOCK|LINE|SCREEN)|COMMENT|FUNCTION\s+KEY|INCLUDE\s+BLOCKS|POSITION|PUSHBUTTON|SKIP|ULINE)|LEAVE\s+(LIST-PROCESSING|PROGRAM|SCREEN|TO LIST-PROCESSING|TO TRANSACTION)(ENDING|STARTING)\s+AT|FORMAT\s+(COLOR|INTENSIFIED|INVERSE|HOTSPOT|INPUT|FRAMES|RESET)|AS\s+(CHECKBOX|SUBSCREEN|WINDOW)|WITH\s+(((NON-)?UNIQUE)?\s+KEY|FRAME)|(BEGIN|END)\s+OF|DELETE(\s+ADJACENT\s+DUPLICATES\sFROM)?|COMPARING(\s+ALL\s+FIELDS)?|(INSERT|APPEND)(\s+INITIAL\s+LINE\s+(IN)?TO|\s+LINES\s+OF)?|IN\s+((BYTE|CHARACTER)\s+MODE|PROGRAM)|END-OF-(DEFINITION|PAGE|SELECTION)|WITH\s+FRAME(\s+TITLE)|(REPLACE|FIND)\s+((FIRST|ALL)\s+OCCURRENCES?\s+OF\s+)?(SUBSTRING|REGEX)?|MATCH\s+(LENGTH|COUNT|LINE|OFFSET)|(RESPECTING|IGNORING)\s+CASE|IN\s+UPDATE\s+TASK|(SOURCE|RESULT)\s+(XML)?|REFERENCE\s+INTO|AND\s+(MARK|RETURN)|CLIENT\s+SPECIFIED|CORRESPONDING\s+FIELDS\s+OF|IF\s+FOUND|FOR\s+EVENT|INHERITING\s+FROM|LEAVE\s+TO\s+SCREEN|LOOP\s+AT\s+(SCREEN)?|LOWER\s+CASE|MATCHCODE\s+OBJECT|MODIF\s+ID|MODIFY\s+SCREEN|NESTING\s+LEVEL|NO\s+INTERVALS|OF\s+STRUCTURE|RADIOBUTTON\s+GROUP|RANGE\s+OF|REF\s+TO|SUPPRESS DIALOG|TABLE\s+OF|UPPER\s+CASE|TRANSPORTING\s+NO\s+FIELDS|VALUE\s+CHECK|VISIBLE\s+LENGTH|HEADER\s+LINE|COMMON\s+PART)\b`, Keyword, nil},
42+
{`(^|(?<=(\s|\.)))(ABBREVIATED|ABSTRACT|ADD|ALIASES|ALIGN|ALPHA|ASSERT|AS|ASSIGN(ING)?|AT(\s+FIRST)?|BACK|BLOCK|BREAK-POINT|CASE|CATCH|CHANGING|CHECK|CLASS|CLEAR|COLLECT|COLOR|COMMIT|CREATE|COMMUNICATION|COMPONENTS?|COMPUTE|CONCATENATE|CONDENSE|CONSTANTS|CONTEXTS|CONTINUE|CONTROLS|COUNTRY|CURRENCY|DATA|DATE|DECIMALS|DEFAULT|DEFINE|DEFINITION|DEFERRED|DEMAND|DETAIL|DIRECTORY|DIVIDE|DO|DUMMY|ELSE(IF)?|ENDAT|ENDCASE|ENDCATCH|ENDCLASS|ENDDO|ENDFORM|ENDFUNCTION|ENDIF|ENDINTERFACE|ENDLOOP|ENDMETHOD|ENDMODULE|ENDSELECT|ENDTRY|ENDWHILE|ENHANCEMENT|EVENTS|EXACT|EXCEPTIONS?|EXIT|EXPONENT|EXPORT|EXPORTING|EXTRACT|FETCH|FIELDS?|FOR|FORM|FORMAT|FREE|FROM|FUNCTION|HIDE|ID|IF|IMPORT|IMPLEMENTATION|IMPORTING|IN|INCLUDE|INCLUDING|INDEX|INFOTYPES|INITIALIZATION|INTERFACE|INTERFACES|INTO|LANGUAGE|LEAVE|LENGTH|LINES|LOAD|LOCAL|JOIN|KEY|NEXT|MAXIMUM|MESSAGE|METHOD[S]?|MINIMUM|MODULE|MODIFIER|MODIFY|MOVE|MULTIPLY|NODES|NUMBER|OBLIGATORY|OBJECT|OF|OFF|ON|OTHERS|OVERLAY|PACK|PAD|PARAMETERS|PERCENTAGE|POSITION|PROGRAM|PROVIDE|PUBLIC|PUT|PF\d\d|RAISE|RAISING|RANGES?|READ|RECEIVE|REDEFINITION|REFRESH|REJECT|REPORT|RESERVE|RESUME|RETRY|RETURN|RETURNING|RIGHT|ROLLBACK|REPLACE|SCROLL|SEARCH|SELECT|SHIFT|SIGN|SINGLE|SIZE|SKIP|SORT|SPLIT|STATICS|STOP|STYLE|SUBMATCHES|SUBMIT|SUBTRACT|SUM(?!\()|SUMMARY|SUMMING|SUPPLY|TABLE|TABLES|TIMESTAMP|TIMES?|TIMEZONE|TITLE|\??TO|TOP-OF-PAGE|TRANSFER|TRANSLATE|TRY|TYPES|ULINE|UNDER|UNPACK|UPDATE|USING|VALUE|VALUES|VIA|VARYING|VARY|WAIT|WHEN|WHERE|WIDTH|WHILE|WITH|WINDOW|WRITE|XSD|ZERO)\b`, Keyword, nil},
43+
{`(abs|acos|asin|atan|boolc|boolx|bit_set|char_off|charlen|ceil|cmax|cmin|condense|contains|contains_any_of|contains_any_not_of|concat_lines_of|cos|cosh|count|count_any_of|count_any_not_of|dbmaxlen|distance|escape|exp|find|find_end|find_any_of|find_any_not_of|floor|frac|from_mixed|insert|lines|log|log10|match|matches|nmax|nmin|numofchar|repeat|replace|rescale|reverse|round|segment|shift_left|shift_right|sign|sin|sinh|sqrt|strlen|substring|substring_after|substring_from|substring_before|substring_to|tan|tanh|to_upper|to_lower|to_mixed|translate|trunc|xstrlen)(\()\b`, ByGroups(NameBuiltin, Punctuation), nil},
44+
{`&[0-9]`, Name, nil},
45+
{`[0-9]+`, LiteralNumberInteger, nil},
46+
{`(?<=(\s|.))(AND|OR|EQ|NE|GT|LT|GE|LE|CO|CN|CA|NA|CS|NOT|NS|CP|NP|BYTE-CO|BYTE-CN|BYTE-CA|BYTE-NA|BYTE-CS|BYTE-NS|IS\s+(NOT\s+)?(INITIAL|ASSIGNED|REQUESTED|BOUND))\b`, OperatorWord, nil},
47+
Include("variable-names"),
48+
{`[?*<>=\-+&]`, Operator, nil},
49+
{`'(''|[^'])*'`, LiteralStringSingle, nil},
50+
{"`([^`])*`", LiteralStringSingle, nil},
51+
{`([|}])([^{}|]*?)([|{])`, ByGroups(Punctuation, LiteralStringSingle, Punctuation), nil},
52+
{`[/;:()\[\],.]`, Punctuation, nil},
53+
{`(!)(\w+)`, ByGroups(Operator, Name), nil},
54+
},
55+
},
56+
))

lexers/testdata/abap.actual

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
*&---------------------------------------------------------------------*
2+
*& Report /WUE/AUFGABE_PRIMZAHL
3+
*&
4+
*&---------------------------------------------------------------------*
5+
*& Anmerkung: um bei einer Zahl entscheiden zu können, ob diese eine Primzahl ist,
6+
*& genügt es die Primzahlen zu prüfen die kleiner gleich der Würzel der Zahl sind
7+
*&
8+
*&---------------------------------------------------------------------*
9+
REPORT /wue/aufgabe_primzahl.
10+
11+
12+
PARAMETERS p_range TYPE i.
13+
14+
"Tabelle in der alle gefundenen Primzahlen gespeichert werden, die kleiner gleich
15+
"der Würzel der eingegebenen Zahl sind
16+
DATA gt_prim_num TYPE TABLE OF i.
17+
18+
"Diese Variable dient dazu, alle Zahlen <= der eingegebenen Zahl und >= 2 aufzustellen
19+
DATA g_number TYPE i VALUE 1.
20+
21+
"Diese Variable dient dazu, zu sagen, ob die aktuelle g_number eine Primzahl ist oder nicht
22+
DATA g_is_prime TYPE abap_bool.
23+
24+
"mit sqrt( zahl1 ) kann die Quadratwurzel der Zahl1 berechnet werden
25+
DATA(g_sqrt_range) = sqrt( p_range ).
26+
27+
28+
29+
"da die zu prüfenden Zahlen bei der 2 beginnend durch Addition von 1 aufgestellt werden
30+
"muss die Schleife lediglich p_range - 1 male durchlaufen werden
31+
DO p_range - 1 TIMES.
32+
33+
"zählt die zu prüfende Zahlen hoch
34+
ADD 1 TO g_number.
35+
36+
"grundsätzlich wird solange, bis es nicht widerlegt ist angenommen, dass g_number eine Primzahl ist
37+
g_is_prime = abap_true.
38+
39+
"Jede Zahl die in der Tabelle gt_prim_num enthalten ist wird geprüft, ob g_number durch diese ohne Rest teilbar ist
40+
LOOP AT gt_prim_num ASSIGNING FIELD-SYMBOL(<g_prim>).
41+
42+
"Durch Zahl1 MOD Zahl2 kann der Rest, der bei Zahl1 / Zahl2 herauskommt ermittelt werden
43+
"Sobald dieser bei g_number / <g_prim> 0 ist, handelt es sich bei g_number um keine Primzahl und somit muss diese nicht
44+
"weiter überprüft werden, folglich kann die Loop-Schleife mit EXIT verlassen werden
45+
IF g_number MOD <g_prim> = 0.
46+
g_is_prime = abap_false.
47+
EXIT.
48+
ENDIF.
49+
50+
ENDLOOP.
51+
52+
"Wenn nicht widerlegt werden konnte, dass g_number eine Primzahl ist, wird diese ausgegeben
53+
IF g_is_prime = abap_true.
54+
55+
"Wenn die neu gefundene Primzahl <= g_sqrt_range, wird diese in die Tabelle gt_prim_num eingefügt (Erklärung siehe Anmerkung)
56+
IF g_number <= g_sqrt_range.
57+
INSERT g_number INTO TABLE gt_prim_num.
58+
ENDIF.
59+
WRITE g_number.
60+
ENDIF.
61+
62+
ENDDO.

lexers/testdata/abap.expected

Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
[
2+
{"type":"CommentSingle","value":"*\u0026---------------------------------------------------------------------*"},
3+
{"type":"Text","value":"\n"},
4+
{"type":"CommentSingle","value":"*\u0026 Report /WUE/AUFGABE_PRIMZAHL"},
5+
{"type":"Text","value":"\n"},
6+
{"type":"CommentSingle","value":"*\u0026"},
7+
{"type":"Text","value":"\n"},
8+
{"type":"CommentSingle","value":"*\u0026---------------------------------------------------------------------*"},
9+
{"type":"Text","value":"\n"},
10+
{"type":"CommentSingle","value":"*\u0026 Anmerkung: um bei einer Zahl entscheiden zu können, ob diese eine Primzahl ist,"},
11+
{"type":"Text","value":"\n"},
12+
{"type":"CommentSingle","value":"*\u0026 genügt es die Primzahlen zu prüfen die kleiner gleich der Würzel der Zahl sind"},
13+
{"type":"Text","value":"\n"},
14+
{"type":"CommentSingle","value":"*\u0026"},
15+
{"type":"Text","value":"\n"},
16+
{"type":"CommentSingle","value":"*\u0026---------------------------------------------------------------------*"},
17+
{"type":"Text","value":"\n"},
18+
{"type":"Keyword","value":"REPORT"},
19+
{"type":"Text","value":" "},
20+
{"type":"Punctuation","value":"/"},
21+
{"type":"NameVariable","value":"wue"},
22+
{"type":"Punctuation","value":"/"},
23+
{"type":"NameVariable","value":"aufgabe_primzahl"},
24+
{"type":"Punctuation","value":"."},
25+
{"type":"Text","value":"\n\n\n"},
26+
{"type":"Keyword","value":"PARAMETERS"},
27+
{"type":"Text","value":" "},
28+
{"type":"NameVariable","value":"p_range"},
29+
{"type":"Text","value":" "},
30+
{"type":"Keyword","value":"TYPE "},
31+
{"type":"NameVariable","value":"i"},
32+
{"type":"Punctuation","value":"."},
33+
{"type":"Text","value":"\n\n"},
34+
{"type":"CommentSingle","value":"\"Tabelle in der alle gefundenen Primzahlen gespeichert werden, die kleiner gleich\n\"der Würzel der eingegebenen Zahl sind\n"},
35+
{"type":"Keyword","value":"DATA"},
36+
{"type":"Text","value":" "},
37+
{"type":"NameVariable","value":"gt_prim_num"},
38+
{"type":"Text","value":" "},
39+
{"type":"Keyword","value":"TYPE TABLE OF"},
40+
{"type":"Text","value":" "},
41+
{"type":"NameVariable","value":"i"},
42+
{"type":"Punctuation","value":"."},
43+
{"type":"Text","value":"\n\n"},
44+
{"type":"CommentSingle","value":"\"Diese Variable dient dazu, alle Zahlen \u003c= der eingegebenen Zahl und \u003e= 2 aufzustellen\n"},
45+
{"type":"Keyword","value":"DATA"},
46+
{"type":"Text","value":" "},
47+
{"type":"NameVariable","value":"g_number"},
48+
{"type":"Text","value":" "},
49+
{"type":"Keyword","value":"TYPE "},
50+
{"type":"NameVariable","value":"i"},
51+
{"type":"Text","value":" "},
52+
{"type":"Keyword","value":"VALUE"},
53+
{"type":"Text","value":" "},
54+
{"type":"LiteralNumberInteger","value":"1"},
55+
{"type":"Punctuation","value":"."},
56+
{"type":"Text","value":"\n\n"},
57+
{"type":"CommentSingle","value":"\"Diese Variable dient dazu, zu sagen, ob die aktuelle g_number eine Primzahl ist oder nicht\n"},
58+
{"type":"Keyword","value":"DATA"},
59+
{"type":"Text","value":" "},
60+
{"type":"NameVariable","value":"g_is_prime"},
61+
{"type":"Text","value":" "},
62+
{"type":"Keyword","value":"TYPE "},
63+
{"type":"NameVariable","value":"abap_bool"},
64+
{"type":"Punctuation","value":"."},
65+
{"type":"Text","value":"\n\n"},
66+
{"type":"CommentSingle","value":"\"mit sqrt( zahl1 ) kann die Quadratwurzel der Zahl1 berechnet werden\n"},
67+
{"type":"Keyword","value":"DATA"},
68+
{"type":"Punctuation","value":"("},
69+
{"type":"NameVariable","value":"g_sqrt_range"},
70+
{"type":"Punctuation","value":")"},
71+
{"type":"Text","value":" "},
72+
{"type":"Operator","value":"="},
73+
{"type":"Text","value":" "},
74+
{"type":"NameVariable","value":"sqrt"},
75+
{"type":"Punctuation","value":"("},
76+
{"type":"Text","value":" "},
77+
{"type":"NameVariable","value":"p_range"},
78+
{"type":"Text","value":" "},
79+
{"type":"Punctuation","value":")."},
80+
{"type":"Text","value":"\n\n\n\n"},
81+
{"type":"CommentSingle","value":"\"da die zu prüfenden Zahlen bei der 2 beginnend durch Addition von 1 aufgestellt werden\n\"muss die Schleife lediglich p_range - 1 male durchlaufen werden\n"},
82+
{"type":"Keyword","value":"DO"},
83+
{"type":"Text","value":" "},
84+
{"type":"NameVariable","value":"p_range"},
85+
{"type":"Text","value":" "},
86+
{"type":"Operator","value":"-"},
87+
{"type":"Text","value":" "},
88+
{"type":"LiteralNumberInteger","value":"1"},
89+
{"type":"Text","value":" "},
90+
{"type":"Keyword","value":"TIMES"},
91+
{"type":"Punctuation","value":"."},
92+
{"type":"Text","value":"\n\n "},
93+
{"type":"CommentSingle","value":"\"zählt die zu prüfende Zahlen hoch\n"},
94+
{"type":"Text","value":" "},
95+
{"type":"Keyword","value":"ADD"},
96+
{"type":"Text","value":" "},
97+
{"type":"LiteralNumberInteger","value":"1"},
98+
{"type":"Text","value":" "},
99+
{"type":"Keyword","value":"TO"},
100+
{"type":"Text","value":" "},
101+
{"type":"NameVariable","value":"g_number"},
102+
{"type":"Punctuation","value":"."},
103+
{"type":"Text","value":"\n\n "},
104+
{"type":"CommentSingle","value":"\"grundsätzlich wird solange, bis es nicht widerlegt ist angenommen, dass g_number eine Primzahl ist\n"},
105+
{"type":"Text","value":" "},
106+
{"type":"NameVariable","value":"g_is_prime"},
107+
{"type":"Text","value":" "},
108+
{"type":"Operator","value":"="},
109+
{"type":"Text","value":" "},
110+
{"type":"NameVariable","value":"abap_true"},
111+
{"type":"Punctuation","value":"."},
112+
{"type":"Text","value":"\n\n "},
113+
{"type":"CommentSingle","value":"\"Jede Zahl die in der Tabelle gt_prim_num enthalten ist wird geprüft, ob g_number durch diese ohne Rest teilbar ist\n"},
114+
{"type":"Text","value":" "},
115+
{"type":"Keyword","value":"LOOP AT "},
116+
{"type":"NameVariable","value":"gt_prim_num"},
117+
{"type":"Text","value":" "},
118+
{"type":"Keyword","value":"ASSIGNING"},
119+
{"type":"Text","value":" "},
120+
{"type":"Keyword","value":"FIELD"},
121+
{"type":"Operator","value":"-"},
122+
{"type":"NameVariable","value":"SYMBOL"},
123+
{"type":"Punctuation","value":"("},
124+
{"type":"NameVariable","value":"\u003cg_prim\u003e"},
125+
{"type":"Punctuation","value":")."},
126+
{"type":"Text","value":"\n\n "},
127+
{"type":"CommentSingle","value":"\"Durch Zahl1 MOD Zahl2 kann der Rest, der bei Zahl1 / Zahl2 herauskommt ermittelt werden\n"},
128+
{"type":"Text","value":" "},
129+
{"type":"CommentSingle","value":"\"Sobald dieser bei g_number / \u003cg_prim\u003e 0 ist, handelt es sich bei g_number um keine Primzahl und somit muss diese nicht\n"},
130+
{"type":"Text","value":" "},
131+
{"type":"CommentSingle","value":"\"weiter überprüft werden, folglich kann die Loop-Schleife mit EXIT verlassen werden\n"},
132+
{"type":"Text","value":" "},
133+
{"type":"Keyword","value":"IF"},
134+
{"type":"Text","value":" "},
135+
{"type":"NameVariable","value":"g_number"},
136+
{"type":"Text","value":" "},
137+
{"type":"NameVariable","value":"MOD"},
138+
{"type":"Text","value":" "},
139+
{"type":"NameVariable","value":"\u003cg_prim\u003e"},
140+
{"type":"Text","value":" "},
141+
{"type":"Operator","value":"="},
142+
{"type":"Text","value":" "},
143+
{"type":"LiteralNumberInteger","value":"0"},
144+
{"type":"Punctuation","value":"."},
145+
{"type":"Text","value":"\n "},
146+
{"type":"NameVariable","value":"g_is_prime"},
147+
{"type":"Text","value":" "},
148+
{"type":"Operator","value":"="},
149+
{"type":"Text","value":" "},
150+
{"type":"NameVariable","value":"abap_false"},
151+
{"type":"Punctuation","value":"."},
152+
{"type":"Text","value":"\n "},
153+
{"type":"Keyword","value":"EXIT"},
154+
{"type":"Punctuation","value":"."},
155+
{"type":"Text","value":"\n "},
156+
{"type":"Keyword","value":"ENDIF"},
157+
{"type":"Punctuation","value":"."},
158+
{"type":"Text","value":"\n\n "},
159+
{"type":"Keyword","value":"ENDLOOP"},
160+
{"type":"Punctuation","value":"."},
161+
{"type":"Text","value":"\n\n "},
162+
{"type":"CommentSingle","value":"\"Wenn nicht widerlegt werden konnte, dass g_number eine Primzahl ist, wird diese ausgegeben\n"},
163+
{"type":"Text","value":" "},
164+
{"type":"Keyword","value":"IF"},
165+
{"type":"Text","value":" "},
166+
{"type":"NameVariable","value":"g_is_prime"},
167+
{"type":"Text","value":" "},
168+
{"type":"Operator","value":"="},
169+
{"type":"Text","value":" "},
170+
{"type":"NameVariable","value":"abap_true"},
171+
{"type":"Punctuation","value":"."},
172+
{"type":"Text","value":"\n\n "},
173+
{"type":"CommentSingle","value":"\"Wenn die neu gefundene Primzahl \u003c= g_sqrt_range, wird diese in die Tabelle gt_prim_num eingefügt (Erklärung siehe Anmerkung)\n"},
174+
{"type":"Text","value":" "},
175+
{"type":"Keyword","value":"IF"},
176+
{"type":"Text","value":" "},
177+
{"type":"NameVariable","value":"g_number"},
178+
{"type":"Text","value":" "},
179+
{"type":"Operator","value":"\u003c="},
180+
{"type":"Text","value":" "},
181+
{"type":"NameVariable","value":"g_sqrt_range"},
182+
{"type":"Punctuation","value":"."},
183+
{"type":"Text","value":"\n "},
184+
{"type":"Keyword","value":"INSERT"},
185+
{"type":"Text","value":" "},
186+
{"type":"NameVariable","value":"g_number"},
187+
{"type":"Text","value":" "},
188+
{"type":"Keyword","value":"INTO"},
189+
{"type":"Text","value":" "},
190+
{"type":"Keyword","value":"TABLE"},
191+
{"type":"Text","value":" "},
192+
{"type":"NameVariable","value":"gt_prim_num"},
193+
{"type":"Punctuation","value":"."},
194+
{"type":"Text","value":"\n "},
195+
{"type":"Keyword","value":"ENDIF"},
196+
{"type":"Punctuation","value":"."},
197+
{"type":"Text","value":"\n "},
198+
{"type":"Keyword","value":"WRITE"},
199+
{"type":"Text","value":" "},
200+
{"type":"NameVariable","value":"g_number"},
201+
{"type":"Punctuation","value":"."},
202+
{"type":"Text","value":"\n "},
203+
{"type":"Keyword","value":"ENDIF"},
204+
{"type":"Punctuation","value":"."},
205+
{"type":"Text","value":"\n\n"},
206+
{"type":"Keyword","value":"ENDDO"},
207+
{"type":"Punctuation","value":"."}
208+
]

0 commit comments

Comments
 (0)