Skip to content

Commit 0d5e277

Browse files
committed
Fix file reading and add some utils mathod
1 parent 26b4302 commit 0d5e277

File tree

12 files changed

+103
-27
lines changed

12 files changed

+103
-27
lines changed

.vscode/launch.json

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"version": "2.0.0",
3+
"configurations": [
4+
{
5+
"name": "Debug",
6+
"type": "cppdbg",
7+
"request": "launch",
8+
"program": "${workspaceFolder}/lenguage",
9+
"args": ["test.txt"],
10+
"stopAtEntry": false,
11+
"cwd": "${workspaceFolder}",
12+
"environment": [],
13+
"externalConsole": false,
14+
"MIMode": "lldb",
15+
"preLaunchTask": "build"
16+
}
17+
],
18+
}

.vscode/tasks.json

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"tasks": [
3+
{
4+
"type": "cppbuild",
5+
"label": "build",
6+
"command": "make",
7+
"args": [],
8+
"options": {
9+
"cwd": "${workspaceFolder}"
10+
},
11+
"problemMatcher": [
12+
"$gcc"
13+
],
14+
"group": {
15+
"kind": "build",
16+
"isDefault": true
17+
},
18+
"detail": "Builds our program using the existing Makefile"
19+
}
20+
],
21+
"version": "2.0.0"
22+
}

Makefile

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
SRC_DIR = src
2-
BUILD_DIR = build/debug
32
CC = gcc
43
SRC_FILES = $(wildcard $(SRC_DIR)/*.c)
54
OBJ_NAME = lenguage
65
COMPILER_FLAGS = -std=c11 -Wall -O0 -g -pedantic
76

87
main:
9-
$(CC) $(COMPILER_FLAGS) $(SRC_FILES) -o $(BUILD_DIR)/$(OBJ_NAME)
8+
$(CC) $(COMPILER_FLAGS) $(SRC_FILES) -o $(OBJ_NAME)
49.6 KB
Binary file not shown.

src/main.c

+12-3
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,21 @@
44

55

66
int main(int argc, char *argv[]){
7+
if(argc != 2) {
8+
printf("Error params");
9+
return 1;
10+
}
11+
712
FILE* file = fopen(argv[1], "r");
13+
if(!file){
14+
printf("Error open file\n");
15+
return 1;
16+
}
17+
818
int size = 10, index = 0;
919
char* character = malloc(size*sizeof(char));
1020

11-
while(feof(file)){
21+
while(!feof(file)){
1222
if(index < size) character[index] = getc(file);
1323
else {
1424
size += 10;
@@ -21,7 +31,6 @@ int main(int argc, char *argv[]){
2131
size = index - 1;
2232
character = realloc(character, size * sizeof(char));
2333

24-
for(int i = 0; i<size; i++)
25-
printf("%c", character[i]);
34+
2635
return 0;
2736
}

src/tokenize.c

+14-20
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,12 @@
11
#include "tokenize.h"
2+
#include "utils.h"
23
#include <stdio.h>
34
#include <stdlib.h>
45
#include <string.h>
56

67

7-
Token* ConcatArrayToken(Token* tokens, Token* elem){
8-
size_t tokensLength = sizeof(tokens) / sizeof(tokens[0]);
9-
Token* result = malloc(tokensLength * sizeof(Token));
10-
memcpy(result, elem, sizeof(Token));
11-
memcpy(result + 1, tokens, tokensLength * sizeof(Token));
12-
return result;
13-
}
14-
15-
char* ConcatArrayChar(char* number, char elem){
16-
char* newNumber = malloc(strlen(number) + 1);
17-
strcmp(newNumber, &elem);
18-
strcmp(newNumber, number);
19-
return newNumber;
20-
}
21-
22-
238
Token* TokenizeRec(char* string, int position, int stringLength){
24-
9+
2510
if(position == stringLength) {
2611
Token *result = malloc(sizeof(Token));
2712
result[0] = (Token){TKN_END, NULL};
@@ -36,8 +21,8 @@ Token* TokenizeRec(char* string, int position, int stringLength){
3621
case '(': return ConcatArrayToken(tokens, &(Token){TKN_LPAR, NULL});
3722
case ')': return ConcatArrayToken(tokens, &(Token){TKN_RPAR, NULL});
3823
case '+': case '-': case '*': case '/': return ConcatArrayToken(tokens, &(Token){TKN_OP, &character});
39-
case '0': case '1': case '2': case '3': case '4':
40-
case '5': case '6': case '7': case '8': case '9': {
24+
25+
case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': {
4126
int number;
4227

4328
if(tokens[0].token == TKN_NUM)
@@ -55,5 +40,14 @@ Token* TokenizeRec(char* string, int position, int stringLength){
5540
}
5641

5742
void Tokenize(char* string, int lenght) {
58-
TokenizeRec(string, 0, lenght);
43+
Token* tokens= TokenizeRec(string, 0, lenght);
44+
for(int i=0; i<GetTokenArrayLength(tokens); i++){
45+
switch(tokens[i].token){
46+
case TKN_END: printf("TKN_END");
47+
case TKN_LPAR: printf("TKN_END");
48+
case TKN_RPAR: printf("TKN_END");
49+
case TKN_NUM: printf("TKN_END");
50+
case TKN_OP: printf("TKN_END");
51+
}
52+
}
5953
}

src/tokenize.h

-2
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ typedef enum Operator Operator;
4343
typedef enum TokenType TokenType;
4444
typedef struct Token Token;
4545

46-
Token *ConcatArrayToken(Token *tokens, Token *elem);
47-
char *ConcatArrayChar(char *number, char elem);
4846
Token *TokenizeRec(char *string, int position, int stringLenght);
4947
void Tokenize(char *string, int lenght);
5048

src/utils.c

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#include "tokenize.h"
2+
#include "utils.h"
3+
#include <stdio.h>
4+
#include <stdlib.h>
5+
#include <string.h>
6+
7+
int GetTokenArrayLength(Token* array){
8+
return (int)sizeof(array) / (int)sizeof(array[0]);
9+
}
10+
11+
Token* ConcatArrayToken(Token* tokens, Token* elem){
12+
int tokensLength = GetTokenArrayLength(tokens);
13+
Token* result = malloc(tokensLength * sizeof(Token));
14+
memcpy(result, elem, sizeof(Token));
15+
memcpy(result + 1, tokens, tokensLength * sizeof(Token));
16+
return result;
17+
}
18+
19+
char* ConcatArrayChar(char* number, char elem){
20+
char* newNumber = malloc(strlen(number) + 1);
21+
strcmp(newNumber, &elem);
22+
strcmp(newNumber, number);
23+
return newNumber;
24+
}

src/utils.h

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#include "tokenize.h"
2+
3+
#ifndef UTILS_H
4+
#define UTILS_H
5+
6+
int GetTokenArrayLength(Token* array);
7+
8+
Token* ConcatArrayToken(Token* tokens, Token* elem);
9+
10+
char* ConcatArrayChar(char* number, char elem);
11+
12+
#endif
File renamed without changes.

0 commit comments

Comments
 (0)