fix(lexer): ongoing-> recongize OR as PIPE
This commit is contained in:
parent
52d35cf355
commit
30e30f55e7
1 changed files with 19 additions and 9 deletions
|
|
@ -72,10 +72,6 @@ static void set_token_keyword(struct token *tok, char *begin, ssize_t size)
|
||||||
tok->type = TOKEN_ELSE;
|
tok->type = TOKEN_ELSE;
|
||||||
else if (strncmp(begin, "elif", size) == 0 && size == 4)
|
else if (strncmp(begin, "elif", size) == 0 && size == 4)
|
||||||
tok->type = TOKEN_ELIF;
|
tok->type = TOKEN_ELIF;
|
||||||
else if (strncmp(begin, "&&", size) == 0 && size == 2)
|
|
||||||
tok->type = TOKEN_AND;
|
|
||||||
else if (strncmp(begin, "||", size) == 0 && size == 2)
|
|
||||||
tok->type = TOKEN_OR;
|
|
||||||
|
|
||||||
// no keywords found.
|
// no keywords found.
|
||||||
if (tok->type == TOKEN_NULL)
|
if (tok->type == TOKEN_NULL)
|
||||||
|
|
@ -97,7 +93,12 @@ static void set_token_operator(struct token *tok, char *begin, ssize_t size)
|
||||||
{
|
{
|
||||||
if (tok->type != TOKEN_NULL)
|
if (tok->type != TOKEN_NULL)
|
||||||
return;
|
return;
|
||||||
if (strncmp(begin, ">", size) == 0)
|
if (strncmp(begin, "&&", size) == 0 && size == 2)
|
||||||
|
tok->type = TOKEN_AND;
|
||||||
|
else if (strncmp(begin, "||", size) == 0 && size == 2)
|
||||||
|
tok->type = TOKEN_OR;
|
||||||
|
|
||||||
|
else if (strncmp(begin, ">", size) == 0)
|
||||||
{
|
{
|
||||||
tok->type = TOKEN_REDIR_RIGHT;
|
tok->type = TOKEN_REDIR_RIGHT;
|
||||||
}
|
}
|
||||||
|
|
@ -231,9 +232,9 @@ struct token *new_token(char *begin, ssize_t size, struct token_info *info)
|
||||||
set_token_assignment(tok, begin, size);
|
set_token_assignment(tok, begin, size);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
set_token_keyword(tok, begin, size);
|
||||||
set_token_operator(tok, begin, size);
|
set_token_operator(tok, begin, size);
|
||||||
set_token_spechar(tok, begin, size);
|
set_token_spechar(tok, begin, size);
|
||||||
set_token_keyword(tok, begin, size);
|
|
||||||
set_token_word(tok, begin, size);
|
set_token_word(tok, begin, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -286,10 +287,19 @@ ssize_t len_op_sepchar(char *stream, ssize_t i)
|
||||||
if (!is_special_char(stream, i))
|
if (!is_special_char(stream, i))
|
||||||
return -1; // should never happen
|
return -1; // should never happen
|
||||||
|
|
||||||
if (stream[i] != '>' && stream[i] != '<')
|
// OR
|
||||||
return 1; // special character (cannot be operator)
|
if (stream[i] == '|' && stream[i + 1] == '|')
|
||||||
|
return 2;
|
||||||
|
|
||||||
// operator
|
// AND
|
||||||
|
if (stream[i] == '|' && stream[i + 1] == '|')
|
||||||
|
return 2;
|
||||||
|
|
||||||
|
// special chars
|
||||||
|
if (stream[i] != '>' && stream[i] != '<')
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
// REDIRS
|
||||||
|
|
||||||
if (stream[i] == '<')
|
if (stream[i] == '<')
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue