Поделио токене заграда на две врсте
This commit is contained in:
parent
d2f18f2339
commit
f066c2f221
16
lexer.c
16
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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue