All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masahiro Yamada <yamada.masahiro@socionext.com>
To: linux-kbuild@vger.kernel.org
Cc: Ulf Magnusson <ulfalizer@gmail.com>,
	linux-kernel@vger.kernel.org,
	Masahiro Yamada <yamada.masahiro@socionext.com>
Subject: [PATCH 18/27] kconfig: use specific tokens instead of T_ASSIGN for assignments
Date: Tue, 11 Dec 2018 20:01:01 +0900	[thread overview]
Message-ID: <1544526070-16690-19-git-send-email-yamada.masahiro@socionext.com> (raw)
In-Reply-To: <1544526070-16690-1-git-send-email-yamada.masahiro@socionext.com>

Currently, the lexer returns T_ASSIGN for all of =, :=, and +=
associating yylval with the flavor.

I want to make the generated lexer as simple as possible. So, the
lexer should convert keywords to tokens without thinking about the
meaning.

   =  ->  T_EQUAL
  :=  ->  T_COLON_EQUAL
  +=  ->  T_PLUS_EQUAL

Unfortunately, Kconfig uses = instead of == for the equal operator.
So, both assignment and comparison use T_EQUAL. The parser can still
distinguish them from the context.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
---

 scripts/kconfig/zconf.l |  6 +++---
 scripts/kconfig/zconf.y | 12 ++++++++++--
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/scripts/kconfig/zconf.l b/scripts/kconfig/zconf.l
index 0265502..981b5f8 100644
--- a/scripts/kconfig/zconf.l
+++ b/scripts/kconfig/zconf.l
@@ -125,9 +125,9 @@ n	[A-Za-z0-9_-]
 			return T_VARIABLE;
 		free(yylval.string);
 	}
-	"="	{ BEGIN(ASSIGN_VAL); yylval.flavor = VAR_RECURSIVE; return T_ASSIGN; }
-	":="	{ BEGIN(ASSIGN_VAL); yylval.flavor = VAR_SIMPLE; return T_ASSIGN; }
-	"+="	{ BEGIN(ASSIGN_VAL); yylval.flavor = VAR_APPEND; return T_ASSIGN; }
+	"="	{ BEGIN(ASSIGN_VAL); return T_EQUAL; }
+	":="	{ BEGIN(ASSIGN_VAL); return T_COLON_EQUAL; }
+	"+="	{ BEGIN(ASSIGN_VAL); return T_PLUS_EQUAL; }
 	[[:blank:]]+
 	.	warn_ignored_character(*yytext);
 	\n	{
diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y
index 8db9189..97f86e2 100644
--- a/scripts/kconfig/zconf.y
+++ b/scripts/kconfig/zconf.y
@@ -70,6 +70,7 @@ static struct menu *current_menu, *current_entry;
 %token T_ALLNOCONFIG_Y
 %token T_BOOL
 %token T_CLOSE_PAREN
+%token T_COLON_EQUAL
 %token T_DEFAULT
 %token T_DEFCONFIG_LIST
 %token T_DEF_BOOL
@@ -79,11 +80,11 @@ static struct menu *current_menu, *current_entry;
 %token T_MODULES
 %token T_OPEN_PAREN
 %token T_OPTION
+%token T_PLUS_EQUAL
 %token T_STRING
 %token T_TRISTATE
 %token T_EOL
 %token <string> T_VARIABLE
-%token <flavor> T_ASSIGN
 %token <string> T_ASSIGN_VAL
 
 %left T_OR
@@ -101,6 +102,7 @@ static struct menu *current_menu, *current_entry;
 %type <id> end
 %type <menu> if_entry menu_entry choice_entry
 %type <string> word_opt assign_val
+%type <flavor> assign_op
 
 %destructor {
 	fprintf(stderr, "%s:%d: missing end statement for this entry\n",
@@ -478,7 +480,13 @@ word_opt: /* empty */			{ $$ = NULL; }
 
 /* assignment statement */
 
-assignment_stmt:  T_VARIABLE T_ASSIGN assign_val T_EOL	{ variable_add($1, $3, $2); free($1); free($3); }
+assignment_stmt:  T_VARIABLE assign_op assign_val T_EOL	{ variable_add($1, $3, $2); free($1); free($3); }
+
+assign_op:
+	  T_EQUAL	{ $$ = VAR_RECURSIVE; }
+	| T_COLON_EQUAL	{ $$ = VAR_SIMPLE; }
+	| T_PLUS_EQUAL	{ $$ = VAR_APPEND; }
+;
 
 assign_val:
 	/* empty */		{ $$ = xstrdup(""); };
-- 
2.7.4


  parent reply	other threads:[~2018-12-11 11:03 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-11 11:00 [PATCH 00/27] kconfig: remove all reduce/shift conflicts, refactor lexer, fix various issues Masahiro Yamada
2018-12-11 11:00 ` Masahiro Yamada
2018-12-11 11:00 ` Masahiro Yamada
2018-12-11 11:00 ` [PATCH 01/27] kconfig: fix file name and line number of warn_ignored_character() Masahiro Yamada
2018-12-11 11:00 ` [PATCH 02/27] kconfig: fix memory leak when EOF is encountered in quotation Masahiro Yamada
2018-12-11 11:00 ` [PATCH 03/27] kconfig: require T_EOL to reduce visible statement Masahiro Yamada
2018-12-11 11:00 ` [PATCH 04/27] kconfig: remove unneeded pattern matching to whitespaces Masahiro Yamada
2018-12-11 11:00 ` [PATCH 05/27] kconfig: refactor pattern matching in STRING state Masahiro Yamada
2018-12-11 11:00 ` [PATCH 06/27] kconfig: fix ambiguous grammar in terms of new lines Masahiro Yamada
2018-12-11 11:00 ` [PATCH 07/27] kconfig: clean up EOF handling in the lexer Masahiro Yamada
2018-12-11 11:00 ` [PATCH 08/27] kconfig: warn no new line at end of file Masahiro Yamada
2018-12-11 11:00 ` [PATCH 09/27] kconfig: remove grammatically ambiguous "unexpected option" diagnostic Masahiro Yamada
2018-12-11 11:00 ` [PATCH 10/27] kconfig: remove grammatically ambiguous option_error Masahiro Yamada
2018-12-11 11:00 ` [PATCH 11/27] kconfig: remove redundant if_block rule Masahiro Yamada
2018-12-11 11:00 ` [PATCH 12/27] kconfig: remove redundant menu_block rule Masahiro Yamada
2018-12-11 11:00 ` [PATCH 13/27] kconfig: loosen the order of "visible" and "depends on" in menu entry Masahiro Yamada
2018-12-11 11:00 ` [PATCH 14/27] kconfig: rename depends_list to comment_option_list Masahiro Yamada
2018-12-11 11:00 ` [PATCH 15/27] kconfig: remove redundant token defines Masahiro Yamada
2018-12-11 11:00 ` [PATCH 16/27] kconfig: use distinct tokens for type and default properties Masahiro Yamada
2018-12-11 11:01 ` [PATCH 17/27] kconfig: refactor scanning and parsing "option" properties Masahiro Yamada
2018-12-11 11:01 ` Masahiro Yamada [this message]
2018-12-11 11:01 ` [PATCH 19/27] kconfig: use T_WORD instead of T_VARIABLE for variables Masahiro Yamada
2018-12-11 11:01 ` [PATCH 20/27] microblaze: surround string default in Kconfig with double quotes Masahiro Yamada
2018-12-12  8:28   ` Michal Simek
2018-12-11 11:01 ` [PATCH 21/27] treewide: surround file paths in Kconfig files " Masahiro Yamada
2018-12-11 11:01   ` Masahiro Yamada
2018-12-11 11:01   ` Masahiro Yamada
2018-12-11 11:19   ` Wolfram Sang
2018-12-11 11:19     ` Wolfram Sang
2018-12-11 11:25   ` Geert Uytterhoeven
2018-12-11 11:25     ` Geert Uytterhoeven
2018-12-11 14:43   ` Ingo Molnar
2018-12-11 14:43     ` Ingo Molnar
2018-12-11 11:01 ` [PATCH 22/27] kconfig: ban the use of '.' and '/' in unquoted words Masahiro Yamada
2018-12-11 11:01 ` [PATCH 23/27] kconfig: refactor end token rules Masahiro Yamada
2018-12-11 11:01 ` [PATCH 24/27] kconfig: stop associating kconf_id with yylval Masahiro Yamada
2018-12-11 11:01 ` [PATCH 25/27] kconfig: switch to ASSIGN_VAL state in the second lexer Masahiro Yamada
2018-12-11 11:01 ` [PATCH 26/27] kconfig: update current_pos " Masahiro Yamada
2018-12-11 11:01 ` [PATCH 27/27] kconfig: remove keyword lookup table entirely Masahiro Yamada
2018-12-19 14:59 ` [PATCH 00/27] kconfig: remove all reduce/shift conflicts, refactor lexer, fix various issues Masahiro Yamada
2018-12-19 14:59   ` Masahiro Yamada

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1544526070-16690-19-git-send-email-yamada.masahiro@socionext.com \
    --to=yamada.masahiro@socionext.com \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ulfalizer@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.