diff --git a/lexer.c b/lexer.c index 8e49ab9..67dd48a 100644 --- a/lexer.c +++ b/lexer.c @@ -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(®Number, "^[-+]?[[:digit:]]+", REG_EXTENDED); regcomp(®Symbol, "^[-+/*]", REG_EXTENDED); /* за сада подржава само симболе -, +, * и / */ - regcomp(®Parenthesis, "^[()]", REG_EXTENDED); + regcomp(®LParenthesis, "^(", REG_EXTENDED); + regcomp(®RParenthesis, "^)", 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(®Parenthesis, input + *i, nmatches, a, 0)) + else if (!regexec(®LParenthesis, input + *i, nmatches, a, 0)) { - result->type = parenthesisToken; + result->type = LparenthesisToken; + } + else if (!regexec(®RParenthesis, input + *i, nmatches, a, 0)) + { + result->type = RparenthesisToken; } else { @@ -90,7 +95,8 @@ token *lex1Token(char *input, int *i) regfree(®Space); regfree(®Number); regfree(®Symbol); - regfree(®Parenthesis); + regfree(®LParenthesis); + regfree(®RParenthesis); return result; } diff --git a/lexer.h b/lexer.h index f55769c..683f4ad 100644 --- a/lexer.h +++ b/lexer.h @@ -5,7 +5,8 @@ typedef enum undefinedToken, numberToken, symbolToken, - parenthesisToken + lParenthesisToken, + rParenthesisToken } tokenType; typedef struct _Token