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

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;
}
regex_t regNumber, regSymbol, regParenthesis, regSpace;
regex_t regNumber, regSymbol, regLParenthesis, regRParenthesis, regSpace;
token *lex1Token(char *input, int *i)
{
@ -50,7 +50,8 @@ token *lex1Token(char *input, int *i)
regcomp(&regNumber, "^[-+]?[[:digit:]]+", REG_EXTENDED);
regcomp(&regSymbol, "^[-+/*]", REG_EXTENDED);
/* за сада подржава само симболе -, +, * и / */
regcomp(&regParenthesis, "^[()]", REG_EXTENDED);
regcomp(&regLParenthesis, "^(", REG_EXTENDED);
regcomp(&regRParenthesis, "^)", REG_EXTENDED);
const int nmatches = 1;
regmatch_t a[nmatches];
@ -67,9 +68,13 @@ token *lex1Token(char *input, int *i)
{
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
{
@ -90,7 +95,8 @@ token *lex1Token(char *input, int *i)
regfree(&regSpace);
regfree(&regNumber);
regfree(&regSymbol);
regfree(&regParenthesis);
regfree(&regLParenthesis);
regfree(&regRParenthesis);
return result;
}

View file

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