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;
|
||||
else if (strncmp(begin, "elif", size) == 0 && size == 4)
|
||||
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.
|
||||
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)
|
||||
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;
|
||||
}
|
||||
|
|
@ -231,9 +232,9 @@ struct token *new_token(char *begin, ssize_t size, struct token_info *info)
|
|||
set_token_assignment(tok, begin, size);
|
||||
else
|
||||
{
|
||||
set_token_keyword(tok, begin, size);
|
||||
set_token_operator(tok, begin, size);
|
||||
set_token_spechar(tok, begin, size);
|
||||
set_token_keyword(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))
|
||||
return -1; // should never happen
|
||||
|
||||
if (stream[i] != '>' && stream[i] != '<')
|
||||
return 1; // special character (cannot be operator)
|
||||
// OR
|
||||
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] == '<')
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue