From f066c2f22119a0fed151ad62b6f8705aed530dd5 Mon Sep 17 00:00:00 2001 From: kappa Date: Mon, 7 Jan 2019 17:50:44 +0100 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=B5=D0=BB=D0=B8=D0=BE=20?= =?UTF-8?q?=D1=82=D0=BE=D0=BA=D0=B5=D0=BD=D0=B5=20=D0=B7=D0=B0=D0=B3=D1=80?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=20=D0=BD=D0=B0=20=D0=B4=D0=B2=D0=B5=20=D0=B2?= =?UTF-8?q?=D1=80=D1=81=D1=82=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lexer.c | 16 +++++++++++----- lexer.h | 3 ++- 2 files changed, 13 insertions(+), 6 deletions(-) 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