Поделио токене заграда на две врсте

This commit is contained in:
kappa 2019-01-07 17:50:44 +01:00
parent d2f18f2339
commit f066c2f221
2 changed files with 13 additions and 6 deletions

16
lexer.c
View file

@ -39,7 +39,7 @@ token *lexLine(char *input)
return root; return root;
} }
regex_t regNumber, regSymbol, regParenthesis, regSpace; regex_t regNumber, regSymbol, regLParenthesis, regRParenthesis, regSpace;
token *lex1Token(char *input, int *i) token *lex1Token(char *input, int *i)
{ {
@ -50,7 +50,8 @@ token *lex1Token(char *input, int *i)
regcomp(&regNumber, "^[-+]?[[:digit:]]+", REG_EXTENDED); regcomp(&regNumber, "^[-+]?[[:digit:]]+", REG_EXTENDED);
regcomp(&regSymbol, "^[-+/*]", REG_EXTENDED); regcomp(&regSymbol, "^[-+/*]", REG_EXTENDED);
/* за сада подржава само симболе -, +, * и / */ /* за сада подржава само симболе -, +, * и / */
regcomp(&regParenthesis, "^[()]", REG_EXTENDED); regcomp(&regLParenthesis, "^(", REG_EXTENDED);
regcomp(&regRParenthesis, "^)", REG_EXTENDED);
const int nmatches = 1; const int nmatches = 1;
regmatch_t a[nmatches]; regmatch_t a[nmatches];
@ -67,9 +68,13 @@ token *lex1Token(char *input, int *i)
{ {
result->type = symbolToken; result->type = symbolToken;
} }
else if (!regexec(&regParenthesis, input + *i, nmatches, a, 0)) else if (!regexec(&regLParenthesis, input + *i, nmatches, a, 0))
{ {
result->type = parenthesisToken; result->type = LparenthesisToken;
}
else if (!regexec(&regRParenthesis, input + *i, nmatches, a, 0))
{
result->type = RparenthesisToken;
} }
else else
{ {
@ -90,7 +95,8 @@ token *lex1Token(char *input, int *i)
regfree(&regSpace); regfree(&regSpace);
regfree(&regNumber); regfree(&regNumber);
regfree(&regSymbol); regfree(&regSymbol);
regfree(&regParenthesis); regfree(&regLParenthesis);
regfree(&regRParenthesis);
return result; return result;
} }

View file

@ -5,7 +5,8 @@ typedef enum
undefinedToken, undefinedToken,
numberToken, numberToken,
symbolToken, symbolToken,
parenthesisToken lParenthesisToken,
rParenthesisToken
} tokenType; } tokenType;
typedef struct _Token typedef struct _Token