first pass at flex lexer
Co-authored-by: Jenessyl <Jenessyl@users.noreply.github.com>
This commit is contained in:
parent
14746ee3e5
commit
de6ef0ac02
|
|
@ -8,7 +8,7 @@ extern char *yytext;
|
|||
|
||||
int main(int argc, char *argv[]) {
|
||||
FILE *file;
|
||||
const char *filename = "samples/hello.py"; // Default filename
|
||||
const char *filename = "samples/sorting-snippet.cbl"; // Default filename
|
||||
|
||||
// Check if a filename is provided as a command-line argument
|
||||
if (argc > 1) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. HELLO-WORLD.
|
||||
PROCEDURE DIVISION.
|
||||
DISPLAY "Hello World!"
|
||||
DISPLAY 'Hello World!'
|
||||
STOP RUN.
|
||||
if
|
||||
|
|
@ -13,7 +13,7 @@ WORKING-STORAGE SECTION.
|
|||
05 WS-INDEX PIC S9(4) COMP.
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
*> * Initialize test data
|
||||
*> Initialize test data
|
||||
MOVE "30" TO WS-SORT-ROW(1)
|
||||
MOVE "10" TO WS-SORT-ROW(2)
|
||||
MOVE "50" TO WS-SORT-ROW(3)
|
||||
|
|
|
|||
|
|
@ -3,10 +3,46 @@
|
|||
%}
|
||||
DIGIT [0-9]
|
||||
LETTER [a-zA-Z]
|
||||
%%
|
||||
(" "|\t|\n) /* skip whitespace */
|
||||
IDENTIFICATION { return TOKEN_IDENTIFICATION; }
|
||||
DIVISION { return TOKEN_KEYWORD_DIVISION; }
|
||||
NAME [a-zA-Z0-9][a-zA-Z0-9_-]*[a-zA-Z0-9]
|
||||
|
||||
%%
|
||||
(" "|\t|\n) /* skip whitespace */
|
||||
\*>\ ?.* { return TOKEN_COMMENT; }
|
||||
IDENTIFICATION { return TOKEN_IDENTIFICATION; }
|
||||
DIVISION { return TOKEN_KEYWORD_DIVISION; }
|
||||
PROGRAM-ID { return TOKEN_PROGRAM_ID; }
|
||||
PROCEDURE { return TOKEN_PROCEDURE; }
|
||||
DATA { return TOKEN_KEYWORD_DATA; }
|
||||
SECTION { return TOKEN_KEYWORD_SECTION; }
|
||||
WORKING-STORAGE { return TOKEN_WORKING_STORAGE; }
|
||||
DISPLAY { return TOKEN_DISPLAY; }
|
||||
STOP { return TOKEN_STOP; }
|
||||
RUN { return TOKEN_RUN; }
|
||||
MOVE { return TOKEN_MOVE; }
|
||||
TO { return TOKEN_KEYWORD_TO; }
|
||||
VARYING { return TOKEN_VARYING; }
|
||||
FROM { return TOKEN_KEYWORD_FROM; }
|
||||
BY { return TOKEN_KEYWORD_BY; }
|
||||
UNTIL { return TOKEN_UNTIL; }
|
||||
PERFORM { return TOKEN_PERFORM; }
|
||||
END-PERFORM { return TOKEN_END_PERFORM; }
|
||||
IF { return TOKEN_IF; }
|
||||
END-IF { return TOKEN_END_IF; }
|
||||
SPACE { return TOKEN_SPACE; }
|
||||
|
||||
\+ { return TOKEN_ADD; }
|
||||
\- { return TOKEN_SUB; }
|
||||
\> { return TOKEN_GREATER_THAN; }
|
||||
\< { return TOKEN_LESS_THAN; }
|
||||
|
||||
"\""[^"]*"\"" { return TOKEN_STRING; }
|
||||
"\'"[^']*"\'" { return TOKEN_STRING; }
|
||||
"(" { return TOKEN_LEFT_PARENTHESIS; }
|
||||
")" { return TOKEN_RIGHT_PARENTHESIS; }
|
||||
|
||||
|
||||
\. { return TOKEN_DOT; }
|
||||
{NAME} { return TOKEN_IDENT; }
|
||||
{DIGIT} { return TOKEN_INTEGER; }
|
||||
%%
|
||||
int yywrap() { return 1; }
|
||||
|
|
|
|||
|
|
@ -1,12 +1,42 @@
|
|||
typedef enum {
|
||||
TOKEN_EOF = 0,
|
||||
// Identification Keywords
|
||||
TOKEN_IDENTIFICATION,
|
||||
TOKEN_KEYWORD_DIVISION,
|
||||
TOKEN_KEYWORD_DATA,
|
||||
TOKEN_KEYWORD_SECTION,
|
||||
TOKEN_PROGRAM_ID,
|
||||
TOKEN_WORKING_STORAGE,
|
||||
TOKEN_PROCEDURE,
|
||||
|
||||
// Program Keywords
|
||||
TOKEN_DISPLAY,
|
||||
TOKEN_STOP,
|
||||
TOKEN_RUN,
|
||||
TOKEN_MOVE,
|
||||
TOKEN_KEYWORD_TO,
|
||||
TOKEN_PERFORM,
|
||||
TOKEN_VARYING,
|
||||
TOKEN_KEYWORD_FROM,
|
||||
TOKEN_KEYWORD_BY,
|
||||
TOKEN_UNTIL,
|
||||
TOKEN_END_PERFORM,
|
||||
TOKEN_IF,
|
||||
TOKEN_END_IF,
|
||||
TOKEN_SPACE,
|
||||
|
||||
// Identifiers
|
||||
TOKEN_IDENT,
|
||||
TOKEN_STRING,
|
||||
TOKEN_DOT
|
||||
TOKEN_INTEGER,
|
||||
TOKEN_LEFT_PARENTHESIS,
|
||||
TOKEN_RIGHT_PARENTHESIS,
|
||||
TOKEN_DOT,
|
||||
TOKEN_COMMENT,
|
||||
|
||||
// Operators
|
||||
TOKEN_ADD,
|
||||
TOKEN_SUB,
|
||||
TOKEN_GREATER_THAN,
|
||||
TOKEN_LESS_THAN,
|
||||
} token_t;
|
||||
Loading…
Reference in New Issue