Skip to content

Commit

Permalink
Variable are not recognized for everything should be ready to expand …
Browse files Browse the repository at this point in the history
…them in the first parser pass
  • Loading branch information
sgranjoux committed Oct 20, 2009
1 parent fb2847b commit d9a8f64
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 39 deletions.
12 changes: 8 additions & 4 deletions libanjuta/anjuta-token.c
Original file line number Diff line number Diff line change
Expand Up @@ -251,16 +251,20 @@ anjuta_token_lex (AnjutaToken *token)

switch (type)
{
case ANJUTA_TOKEN_VARIABLE:
case ANJUTA_TOKEN_COMMENT:
token = anjuta_token_next_sibling (token);
break;
case ANJUTA_TOKEN_FILE:
token = anjuta_token_next (token);
break;
default:
if (type < ANJUTA_TOKEN_FIRST)
{
/*if (type < ANJUTA_TOKEN_FIRST)
{*/
return token;
}
/*}
token = anjuta_token_next (token);
break;
break;*/
}
}

Expand Down
1 change: 1 addition & 0 deletions libanjuta/anjuta-token.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ typedef enum
ANJUTA_TOKEN_FIRST = 16384,
ANJUTA_TOKEN_FILE,
ANJUTA_TOKEN_MACRO,
ANJUTA_TOKEN_CONTENT,
ANJUTA_TOKEN_EOV,
ANJUTA_TOKEN_PARSED,
ANJUTA_TOKEN_KEYWORD,
Expand Down
18 changes: 13 additions & 5 deletions src/mk-parser.y
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,10 @@ file:
;

first_pass:
not_eol_token
all_token
| EOL
| first_pass not_eol_token
| first_pass all_token
| first_pass EOL {
g_message ("EOL %p", $2);
*last = $2;
}
;
Expand Down Expand Up @@ -322,6 +321,16 @@ not_eol_token:
| space_token
;

all_token:
name_token
| space_token
| variable_token
| equal_token
| rule_token
| depend_token
| HASH
;

prerequisite_token:
name_token
| equal_token
Expand Down Expand Up @@ -354,8 +363,7 @@ head_token:
variable_token:
VARIABLE {
anjuta_token_set_type ($$, MK_TOKEN_VARIABLE);
/*g_message ("variable is %s", anjuta_token_evaluate ($$));
mkp_scanner_parse_variable (scanner, $$);*/
//mkp_scanner_parse_variable (scanner, $$);
}
;

Expand Down
71 changes: 41 additions & 30 deletions src/mk-scanner.l
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@

//#define YY_USER_INIT {yy_flex_debug = 1;}

static AnjutaToken* mkp_scanner_append_token (MkpScanner *scanner, gint token);
static AnjutaToken* mkp_scanner_append_lex_token (MkpScanner *scanner, gint token);
static gint mkp_scanner_last_token (MkpScanner *scanner);
static gint mkp_scanner_last_flags (MkpScanner *scanner);
static void mkp_scanner_update_line_width (MkpScanner *scanner, YYLTYPE *loc);
Expand All @@ -53,7 +53,7 @@ static gint mkp_scanner_parse_end (MkpScanner *scanner);
void mkp_project_update_variable (MkpProject *project, AnjutaToken *variable);
void mkp_project_add_rule (MkpProject *project, AnjutaToken *rule);

#define RETURN(tok) *yylval = mkp_scanner_append_token (yyextra, tok); \
#define RETURN(tok) *yylval = mkp_scanner_append_lex_token (yyextra, tok); \
return tok

%}
Expand Down Expand Up @@ -168,6 +168,10 @@ struct _MkpBuffer
AnjutaToken *next;
gsize pos;

/* Place to put new token */
AnjutaToken *first;
AnjutaToken *last;

MkpBuffer *parent;
};

Expand All @@ -182,17 +186,26 @@ struct _MkpScanner

MkpProject *project;

AnjutaToken *first;
AnjutaToken *last;

guint line_width;
};

/* Private functions
*---------------------------------------------------------------------------*/

void
mkp_scanner_append_token (MkpScanner *scanner, AnjutaToken *token)
{
if (scanner->buffer->last == NULL)
{
scanner->buffer->last = anjuta_token_insert_child (scanner->buffer->first, token);
}
else
{
scanner->buffer->last = anjuta_token_insert_after (scanner->buffer->last, token);
}
}
static AnjutaToken*
mkp_scanner_append_token (MkpScanner *scanner, gint token)
mkp_scanner_append_lex_token (MkpScanner *scanner, gint token)
{
AnjutaToken *frag;

Expand Down Expand Up @@ -261,14 +274,7 @@ mkp_scanner_append_token (MkpScanner *scanner, gint token)
}
}

if (scanner->last == NULL)
{
scanner->last = anjuta_token_insert_child (scanner->first, frag);
}
else
{
scanner->last = anjuta_token_insert_after (scanner->last, frag);
}
mkp_scanner_append_token (scanner, frag);

return frag;
}
Expand All @@ -289,15 +295,15 @@ void
mkp_scanner_parse_variable (MkpScanner *scanner, AnjutaToken *variable)
{
AnjutaToken *token;
AnjutaToken *content;

token = mkp_project_get_variable_token (scanner->project, variable);
anjuta_token_set_type (variable, ANJUTA_TOKEN_VARIABLE);
content = anjuta_token_new_static (ANJUTA_TOKEN_CONTENT, NULL);
mkp_scanner_append_token (scanner, content);

token = mkp_project_get_variable_token (scanner->project, variable);
if (token != NULL)
{
anjuta_token_set_type (variable, ANJUTA_TOKEN_MACRO);
token = anjuta_token_copy (token);
anjuta_token_insert_after (variable, token);

mkp_scanner_parse_token (scanner, token, NULL);
}
}
Expand Down Expand Up @@ -490,7 +496,7 @@ mkp_scanner_parse_token (MkpScanner *scanner, AnjutaToken *token, GError **error
#endif

/* Move all know data in a list */
anjuta_token_insert_after (token, anjuta_token_new_static (ANJUTA_TOKEN_EOV, NULL));
/*anjuta_token_insert_after (token, anjuta_token_new_static (ANJUTA_TOKEN_EOV, NULL));
for (child = token;anjuta_token_get_type (child) != ANJUTA_TOKEN_EOV;)
{
child = anjuta_token_ungroup (child);
Expand All @@ -503,20 +509,20 @@ mkp_scanner_parse_token (MkpScanner *scanner, AnjutaToken *token, GError **error
if (first == NULL) first = child;
child = anjuta_token_next_sibling (child);
}
}
}*/

buffer->next = first;
buffer->next = token;
buffer->start = buffer->next;

scanner->last = NULL;
scanner->first = anjuta_token_new_static (ANJUTA_TOKEN_FILE, NULL);

if (scanner->buffer != NULL)
{
/* Parse an included file or a expanded variable */
buffer->parent = scanner->buffer;
scanner->buffer = buffer;

buffer->first = buffer->parent->last;
buffer->last = NULL;

yypush_buffer_state(yy_create_buffer(NULL, YY_BUF_SIZE, scanner->scanner), scanner->scanner);

return TRUE;
Expand All @@ -528,7 +534,12 @@ mkp_scanner_parse_token (MkpScanner *scanner, AnjutaToken *token, GError **error
gint status;
YYSTYPE yylval_param;
YYLTYPE yylloc_param;
AnjutaToken* yytok = scanner->first;
AnjutaToken* yytok;

buffer->last = NULL;
buffer->first = anjuta_token_new_static (ANJUTA_TOKEN_FILE, NULL);

yytok = buffer->first;

scanner->buffer = buffer;

Expand All @@ -542,6 +553,7 @@ mkp_scanner_parse_token (MkpScanner *scanner, AnjutaToken *token, GError **error
AnjutaToken *last = NULL;

status = mkp_yypush_parse (ps1, yychar, &yylval_param, &yylloc_param, scanner, &last);

if ((status != YYPUSH_MORE) || (last != NULL))
{
while (yytok != last)
Expand All @@ -551,23 +563,22 @@ mkp_scanner_parse_token (MkpScanner *scanner, AnjutaToken *token, GError **error
YYLTYPE yylloc_param;
gint yychar;

anjuta_token_dump (yytok);
yytok = anjuta_token_lex (yytok);
yychar = anjuta_token_get_type (yytok);

yylval_param = yytok;
g_message ("parse %d =%s=", yychar, anjuta_token_get_value (yytok));
status = mkp_yypush_parse (ps2, yychar, &yylval_param, &yylloc_param, scanner, NULL);
if (status != YYPUSH_MORE) break;
yytok = anjuta_token_next (yytok);
}
if (last == NULL) mkp_yypush_parse (ps2, 0, &yylval_param, &yylloc_param, scanner, NULL);

last = NULL;
}
} while (status == YYPUSH_MORE);
mkp_yypstate_delete (ps1);
mkp_yypstate_delete (ps2);

anjuta_token_dump (scanner->first);

return TRUE;
//return mkp_yyparse (scanner) == 0;
}
Expand Down

0 comments on commit d9a8f64

Please sign in to comment.