Skip to content

Commit

Permalink
Add ABAP lexer
Browse files Browse the repository at this point in the history
Jos512 authored and alecthomas committed Sep 19, 2019

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
1 parent b964bce commit d122d30
Showing 4 changed files with 327 additions and 1 deletion.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -35,7 +35,7 @@ translators for Pygments lexers and styles.

Prefix | Language
:----: | --------
A | ABNF, ActionScript, ActionScript 3, Ada, Angular2, ANTLR, ApacheConf, APL, AppleScript, Arduino, Awk
A | ABAP, ABNF, ActionScript, ActionScript 3, Ada, Angular2, ANTLR, ApacheConf, APL, AppleScript, Arduino, Awk
B | Ballerina, Base Makefile, Bash, Batchfile, BlitzBasic, BNF, Brainfuck
C | C, C#, C++, Cap'n Proto, Cassandra CQL, Ceylon, CFEngine3, cfstatement, ChaiScript, Cheetah, Clojure, CMake, COBOL, CoffeeScript, Common Lisp, Coq, Crystal, CSS, Cython
D | D, Dart, Diff, Django/Jinja, Docker, DTD
56 changes: 56 additions & 0 deletions lexers/a/abap.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package a

import (
. "github.com/alecthomas/chroma" // nolint
"github.com/alecthomas/chroma/lexers/internal"
)

// ABAP lexer.
var Abap = internal.Register(MustNewLexer(
&Config{
Name: "ABAP",
Aliases: []string{"abap"},
Filenames: []string{"*.abap", "*.ABAP"},
MimeTypes: []string{"text/x-abap"},
CaseInsensitive: true,
},
Rules{
"common": {
{`\s+`, Text, nil},
{`^\*.*$`, CommentSingle, nil},
{`\".*?\n`, CommentSingle, nil},
{`##\w+`, CommentSpecial, nil},
},
"variable-names": {
{`<\S+>`, NameVariable, nil},
{`\w[\w~]*(?:(\[\])|->\*)?`, NameVariable, nil},
},
"root": {
Include("common"),
{`CALL\s+(?:BADI|CUSTOMER-FUNCTION|FUNCTION)`, Keyword, nil},
{`(CALL\s+(?:DIALOG|SCREEN|SUBSCREEN|SELECTION-SCREEN|TRANSACTION|TRANSFORMATION))\b`, Keyword, nil},
{`(FORM|PERFORM)(\s+)(\w+)`, ByGroups(Keyword, Text, NameFunction), nil},
{`(PERFORM)(\s+)(\()(\w+)(\))`, ByGroups(Keyword, Text, Punctuation, NameVariable, Punctuation), nil},
{`(MODULE)(\s+)(\S+)(\s+)(INPUT|OUTPUT)`, ByGroups(Keyword, Text, NameFunction, Text, Keyword), nil},
{`(METHOD)(\s+)([\w~]+)`, ByGroups(Keyword, Text, NameFunction), nil},
{`(\s+)([\w\-]+)([=\-]>)([\w\-~]+)`, ByGroups(Text, NameVariable, Operator, NameFunction), nil},
{`(?<=(=|-)>)([\w\-~]+)(?=\()`, NameFunction, nil},
{`(TEXT)(-)(\d{3})`, ByGroups(Keyword, Punctuation, LiteralNumberInteger), nil},
{`(TEXT)(-)(\w{3})`, ByGroups(Keyword, Punctuation, NameVariable), nil},
{`(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},
{`(?<![-\>])(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},
{`(^|(?<=(\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},
{`(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},
{`&[0-9]`, Name, nil},
{`[0-9]+`, LiteralNumberInteger, nil},
{`(?<=(\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},
Include("variable-names"),
{`[?*<>=\-+&]`, Operator, nil},
{`'(''|[^'])*'`, LiteralStringSingle, nil},
{"`([^`])*`", LiteralStringSingle, nil},
{`([|}])([^{}|]*?)([|{])`, ByGroups(Punctuation, LiteralStringSingle, Punctuation), nil},
{`[/;:()\[\],.]`, Punctuation, nil},
{`(!)(\w+)`, ByGroups(Operator, Name), nil},
},
},
))
62 changes: 62 additions & 0 deletions lexers/testdata/abap.actual
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
*&---------------------------------------------------------------------*
*& Report /WUE/AUFGABE_PRIMZAHL
*&
*&---------------------------------------------------------------------*
*& Anmerkung: um bei einer Zahl entscheiden zu können, ob diese eine Primzahl ist,
*& genügt es die Primzahlen zu prüfen die kleiner gleich der Würzel der Zahl sind
*&
*&---------------------------------------------------------------------*
REPORT /wue/aufgabe_primzahl.


PARAMETERS p_range TYPE i.

"Tabelle in der alle gefundenen Primzahlen gespeichert werden, die kleiner gleich
"der Würzel der eingegebenen Zahl sind
DATA gt_prim_num TYPE TABLE OF i.

"Diese Variable dient dazu, alle Zahlen <= der eingegebenen Zahl und >= 2 aufzustellen
DATA g_number TYPE i VALUE 1.

"Diese Variable dient dazu, zu sagen, ob die aktuelle g_number eine Primzahl ist oder nicht
DATA g_is_prime TYPE abap_bool.

"mit sqrt( zahl1 ) kann die Quadratwurzel der Zahl1 berechnet werden
DATA(g_sqrt_range) = sqrt( p_range ).



"da die zu prüfenden Zahlen bei der 2 beginnend durch Addition von 1 aufgestellt werden
"muss die Schleife lediglich p_range - 1 male durchlaufen werden
DO p_range - 1 TIMES.

"zählt die zu prüfende Zahlen hoch
ADD 1 TO g_number.

"grundsätzlich wird solange, bis es nicht widerlegt ist angenommen, dass g_number eine Primzahl ist
g_is_prime = abap_true.

"Jede Zahl die in der Tabelle gt_prim_num enthalten ist wird geprüft, ob g_number durch diese ohne Rest teilbar ist
LOOP AT gt_prim_num ASSIGNING FIELD-SYMBOL(<g_prim>).

"Durch Zahl1 MOD Zahl2 kann der Rest, der bei Zahl1 / Zahl2 herauskommt ermittelt werden
"Sobald dieser bei g_number / <g_prim> 0 ist, handelt es sich bei g_number um keine Primzahl und somit muss diese nicht
"weiter überprüft werden, folglich kann die Loop-Schleife mit EXIT verlassen werden
IF g_number MOD <g_prim> = 0.
g_is_prime = abap_false.
EXIT.
ENDIF.

ENDLOOP.

"Wenn nicht widerlegt werden konnte, dass g_number eine Primzahl ist, wird diese ausgegeben
IF g_is_prime = abap_true.

"Wenn die neu gefundene Primzahl <= g_sqrt_range, wird diese in die Tabelle gt_prim_num eingefügt (Erklärung siehe Anmerkung)
IF g_number <= g_sqrt_range.
INSERT g_number INTO TABLE gt_prim_num.
ENDIF.
WRITE g_number.
ENDIF.

ENDDO.
208 changes: 208 additions & 0 deletions lexers/testdata/abap.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
[
{"type":"CommentSingle","value":"*\u0026---------------------------------------------------------------------*"},
{"type":"Text","value":"\n"},
{"type":"CommentSingle","value":"*\u0026 Report /WUE/AUFGABE_PRIMZAHL"},
{"type":"Text","value":"\n"},
{"type":"CommentSingle","value":"*\u0026"},
{"type":"Text","value":"\n"},
{"type":"CommentSingle","value":"*\u0026---------------------------------------------------------------------*"},
{"type":"Text","value":"\n"},
{"type":"CommentSingle","value":"*\u0026 Anmerkung: um bei einer Zahl entscheiden zu können, ob diese eine Primzahl ist,"},
{"type":"Text","value":"\n"},
{"type":"CommentSingle","value":"*\u0026 genügt es die Primzahlen zu prüfen die kleiner gleich der Würzel der Zahl sind"},
{"type":"Text","value":"\n"},
{"type":"CommentSingle","value":"*\u0026"},
{"type":"Text","value":"\n"},
{"type":"CommentSingle","value":"*\u0026---------------------------------------------------------------------*"},
{"type":"Text","value":"\n"},
{"type":"Keyword","value":"REPORT"},
{"type":"Text","value":" "},
{"type":"Punctuation","value":"/"},
{"type":"NameVariable","value":"wue"},
{"type":"Punctuation","value":"/"},
{"type":"NameVariable","value":"aufgabe_primzahl"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n\n\n"},
{"type":"Keyword","value":"PARAMETERS"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"p_range"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"TYPE "},
{"type":"NameVariable","value":"i"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n\n"},
{"type":"CommentSingle","value":"\"Tabelle in der alle gefundenen Primzahlen gespeichert werden, die kleiner gleich\n\"der Würzel der eingegebenen Zahl sind\n"},
{"type":"Keyword","value":"DATA"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"gt_prim_num"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"TYPE TABLE OF"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"i"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n\n"},
{"type":"CommentSingle","value":"\"Diese Variable dient dazu, alle Zahlen \u003c= der eingegebenen Zahl und \u003e= 2 aufzustellen\n"},
{"type":"Keyword","value":"DATA"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"g_number"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"TYPE "},
{"type":"NameVariable","value":"i"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"VALUE"},
{"type":"Text","value":" "},
{"type":"LiteralNumberInteger","value":"1"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n\n"},
{"type":"CommentSingle","value":"\"Diese Variable dient dazu, zu sagen, ob die aktuelle g_number eine Primzahl ist oder nicht\n"},
{"type":"Keyword","value":"DATA"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"g_is_prime"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"TYPE "},
{"type":"NameVariable","value":"abap_bool"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n\n"},
{"type":"CommentSingle","value":"\"mit sqrt( zahl1 ) kann die Quadratwurzel der Zahl1 berechnet werden\n"},
{"type":"Keyword","value":"DATA"},
{"type":"Punctuation","value":"("},
{"type":"NameVariable","value":"g_sqrt_range"},
{"type":"Punctuation","value":")"},
{"type":"Text","value":" "},
{"type":"Operator","value":"="},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"sqrt"},
{"type":"Punctuation","value":"("},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"p_range"},
{"type":"Text","value":" "},
{"type":"Punctuation","value":")."},
{"type":"Text","value":"\n\n\n\n"},
{"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"},
{"type":"Keyword","value":"DO"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"p_range"},
{"type":"Text","value":" "},
{"type":"Operator","value":"-"},
{"type":"Text","value":" "},
{"type":"LiteralNumberInteger","value":"1"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"TIMES"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n\n "},
{"type":"CommentSingle","value":"\"zählt die zu prüfende Zahlen hoch\n"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"ADD"},
{"type":"Text","value":" "},
{"type":"LiteralNumberInteger","value":"1"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"TO"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"g_number"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n\n "},
{"type":"CommentSingle","value":"\"grundsätzlich wird solange, bis es nicht widerlegt ist angenommen, dass g_number eine Primzahl ist\n"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"g_is_prime"},
{"type":"Text","value":" "},
{"type":"Operator","value":"="},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"abap_true"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n\n "},
{"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"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"LOOP AT "},
{"type":"NameVariable","value":"gt_prim_num"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"ASSIGNING"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"FIELD"},
{"type":"Operator","value":"-"},
{"type":"NameVariable","value":"SYMBOL"},
{"type":"Punctuation","value":"("},
{"type":"NameVariable","value":"\u003cg_prim\u003e"},
{"type":"Punctuation","value":")."},
{"type":"Text","value":"\n\n "},
{"type":"CommentSingle","value":"\"Durch Zahl1 MOD Zahl2 kann der Rest, der bei Zahl1 / Zahl2 herauskommt ermittelt werden\n"},
{"type":"Text","value":" "},
{"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"},
{"type":"Text","value":" "},
{"type":"CommentSingle","value":"\"weiter überprüft werden, folglich kann die Loop-Schleife mit EXIT verlassen werden\n"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"IF"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"g_number"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"MOD"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"\u003cg_prim\u003e"},
{"type":"Text","value":" "},
{"type":"Operator","value":"="},
{"type":"Text","value":" "},
{"type":"LiteralNumberInteger","value":"0"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n "},
{"type":"NameVariable","value":"g_is_prime"},
{"type":"Text","value":" "},
{"type":"Operator","value":"="},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"abap_false"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n "},
{"type":"Keyword","value":"EXIT"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n "},
{"type":"Keyword","value":"ENDIF"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n\n "},
{"type":"Keyword","value":"ENDLOOP"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n\n "},
{"type":"CommentSingle","value":"\"Wenn nicht widerlegt werden konnte, dass g_number eine Primzahl ist, wird diese ausgegeben\n"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"IF"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"g_is_prime"},
{"type":"Text","value":" "},
{"type":"Operator","value":"="},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"abap_true"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n\n "},
{"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"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"IF"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"g_number"},
{"type":"Text","value":" "},
{"type":"Operator","value":"\u003c="},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"g_sqrt_range"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n "},
{"type":"Keyword","value":"INSERT"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"g_number"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"INTO"},
{"type":"Text","value":" "},
{"type":"Keyword","value":"TABLE"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"gt_prim_num"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n "},
{"type":"Keyword","value":"ENDIF"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n "},
{"type":"Keyword","value":"WRITE"},
{"type":"Text","value":" "},
{"type":"NameVariable","value":"g_number"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n "},
{"type":"Keyword","value":"ENDIF"},
{"type":"Punctuation","value":"."},
{"type":"Text","value":"\n\n"},
{"type":"Keyword","value":"ENDDO"},
{"type":"Punctuation","value":"."}
]

0 comments on commit d122d30

Please sign in to comment.