Skip to content

Commit f5b7d2e

Browse files
authored
Sort keywords when they appear in lists (#5591)
Signed-off-by: Chris Dodd <cdodd@nvidia.com>
1 parent 39e5c45 commit f5b7d2e

2 files changed

Lines changed: 24 additions & 27 deletions

File tree

frontends/parsers/p4/p4lexer.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,10 @@ using Parser = P4::P4Parser;
156156
return makeToken(INT); }
157157
"key" { BEGIN(driver.saveState); driver.template_args = false;
158158
return makeToken(KEY); }
159+
"list" { BEGIN(driver.saveState); driver.template_args = true;
160+
return makeToken(LIST); }
159161
"match_kind" { BEGIN(driver.saveState); driver.template_args = false;
160162
return makeToken(MATCH_KIND); }
161-
"type" { BEGIN(driver.saveState); driver.template_args = false;
162-
return makeToken(TYPE); }
163163
"out" { BEGIN(driver.saveState); driver.template_args = false;
164164
return makeToken(OUT); }
165165
"parser" { BEGIN(driver.saveState); driver.template_args = false;
@@ -190,14 +190,14 @@ using Parser = P4::P4Parser;
190190
return makeToken(TRUE); }
191191
"tuple" { BEGIN(driver.saveState); driver.template_args = true;
192192
return makeToken(TUPLE); }
193+
"type" { BEGIN(driver.saveState); driver.template_args = false;
194+
return makeToken(TYPE); }
193195
"typedef" { BEGIN(driver.saveState); driver.template_args = false;
194196
return makeToken(TYPEDEF); }
195197
"varbit" { BEGIN(driver.saveState); driver.template_args = true;
196198
return makeToken(VARBIT); }
197199
"value_set" { BEGIN(driver.saveState); driver.template_args = true;
198200
return makeToken(VALUESET); }
199-
"list" { BEGIN(driver.saveState); driver.template_args = true;
200-
return makeToken(LIST); }
201201
"void" { BEGIN(driver.saveState); driver.template_args = false;
202202
return makeToken(VOID); }
203203
"_" { BEGIN(driver.saveState); driver.template_args = false;

frontends/parsers/p4/p4parser.ypp

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -258,11 +258,11 @@ using namespace P4;
258258
%token<Token> MASK "&&&"
259259
%token<Token> DOTS "..."
260260
%token<Token> RANGE ".."
261-
%token<Token> TRUE FALSE THIS
262261
%token<Token> ABSTRACT ACTION ACTIONS APPLY BOOL BIT BREAK CONST CONTINUE CONTROL DEFAULT
263-
ELSE ENTRIES ENUM ERROR EXIT EXTERN FOR HEADER HEADER_UNION IF IN INOUT
264-
INT KEY LIST SELECT MATCH_KIND TYPE OUT PACKAGE PARSER PRAGMA PRIORITY RETURN
265-
STATE STRING STRUCT SWITCH TABLE TRANSITION TUPLE TYPEDEF VARBIT VALUESET VOID
262+
ELSE ENTRIES ENUM ERROR EXIT EXTERN FALSE FOR HEADER HEADER_UNION IF IN INOUT
263+
INT KEY LIST MATCH_KIND OUT PACKAGE PARSER PRAGMA PRIORITY RETURN SELECT
264+
STATE STRING STRUCT SWITCH TABLE THIS TRANSITION TRUE TUPLE TYPE TYPEDEF
265+
VARBIT VALUESET VOID
266266

267267
%token<cstring> IDENTIFIER TYPE_IDENTIFIER STRING_LITERAL
268268
%token<UnparsedConstant> INTEGER
@@ -506,13 +506,13 @@ declaration
506506

507507
nonTypeName
508508
: IDENTIFIER { $$ = new IR::ID(@1, $1); }
509+
| ACTIONS { $$ = new IR::ID(@1, "actions"_cs); }
509510
| APPLY { $$ = new IR::ID(@1, "apply"_cs); }
511+
| ENTRIES { $$ = new IR::ID(@1, "entries"_cs); }
510512
| KEY { $$ = new IR::ID(@1, "key"_cs); }
511-
| ACTIONS { $$ = new IR::ID(@1, "actions"_cs); }
513+
| PRIORITY { $$ = new IR::ID(@1, "priority"_cs); }
512514
| STATE { $$ = new IR::ID(@1, "state"_cs); }
513-
| ENTRIES { $$ = new IR::ID(@1, "entries"_cs); }
514515
| TYPE { $$ = new IR::ID(@1, "type"_cs); }
515-
| PRIORITY { $$ = new IR::ID(@1, "priority"_cs); }
516516
;
517517

518518
name
@@ -525,9 +525,9 @@ nonTableKwName
525525
: IDENTIFIER { $$ = new IR::ID(@1, $1); }
526526
| TYPE_IDENTIFIER { $$ = new IR::ID(@1, $1); }
527527
| APPLY { $$ = new IR::ID(@1, "apply"_cs); }
528+
| PRIORITY { $$ = new IR::ID(@1, "priority"_cs); }
528529
| STATE { $$ = new IR::ID(@1, "state"_cs); }
529530
| TYPE { $$ = new IR::ID(@1, "type"_cs); }
530-
| PRIORITY { $$ = new IR::ID(@1, "priority"_cs); }
531531
;
532532

533533
optCONST
@@ -616,8 +616,8 @@ annotationName
616616
| INOUT { $$ = new IR::ID(@1, "inout"_cs); }
617617
| INT { $$ = new IR::ID(@1, "int"_cs); }
618618
| KEY { $$ = new IR::ID(@1, "key"_cs); }
619+
| LIST { $$ = new IR::ID(@1, "list"_cs); }
619620
| MATCH_KIND { $$ = new IR::ID(@1, "match_kind"_cs); }
620-
| TYPE { $$ = new IR::ID(@1, "type"_cs); }
621621
| OUT { $$ = new IR::ID(@1, "out"_cs); }
622622
| PARSER { $$ = new IR::ID(@1, "parser"_cs); }
623623
| PACKAGE { $$ = new IR::ID(@1, "package"_cs); }
@@ -633,10 +633,10 @@ annotationName
633633
| TRANSITION { $$ = new IR::ID(@1, "transition"_cs); }
634634
| TRUE { $$ = new IR::ID(@1, "true"_cs); }
635635
| TUPLE { $$ = new IR::ID(@1, "tuple"_cs); }
636+
| TYPE { $$ = new IR::ID(@1, "type"_cs); }
636637
| TYPEDEF { $$ = new IR::ID(@1, "typedef"_cs); }
637638
| VARBIT { $$ = new IR::ID(@1, "varbit"_cs); }
638639
| VALUESET { $$ = new IR::ID(@1, "valueset"_cs); }
639-
| LIST { $$ = new IR::ID(@1, "list"_cs); }
640640
| VOID { $$ = new IR::ID(@1, "void"_cs); }
641641
| "_" { $$ = new IR::ID(@1, "_"_cs); }
642642
| IDENTIFIER { $$ = new IR::ID(@1, $1); }
@@ -671,8 +671,8 @@ annotationToken
671671
| INOUT { $$ = $1; }
672672
| INT { $$ = $1; }
673673
| KEY { $$ = $1; }
674+
| LIST { $$ = $1; }
674675
| MATCH_KIND { $$ = $1; }
675-
| TYPE { $$ = $1; }
676676
| OUT { $$ = $1; }
677677
| PARSER { $$ = $1; }
678678
| PACKAGE { $$ = $1; }
@@ -688,10 +688,10 @@ annotationToken
688688
| TRANSITION { $$ = $1; }
689689
| TRUE { $$ = $1; }
690690
| TUPLE { $$ = $1; }
691+
| TYPE { $$ = $1; }
691692
| TYPEDEF { $$ = $1; }
692693
| VARBIT { $$ = $1; }
693694
| VALUESET { $$ = $1; }
694-
| LIST { $$ = $1; }
695695
| VOID { $$ = $1; }
696696
| "_" { $$ = $1; }
697697

@@ -777,8 +777,8 @@ parameter
777777

778778
direction
779779
: IN { $$ = IR::Direction::In; }
780-
| OUT { $$ = IR::Direction::Out; }
781780
| INOUT { $$ = IR::Direction::InOut; }
781+
| OUT { $$ = IR::Direction::Out; }
782782
| %empty { $$ = IR::Direction::None; }
783783
;
784784

@@ -1102,18 +1102,15 @@ specializedType
11021102
;
11031103

11041104
baseType
1105-
: BOOL { $$ = IR::Type_Boolean::get(@1); }
1106-
| MATCH_KIND { $$ = IR::Type_MatchKind::get(@1); }
1105+
: BIT { $$ = IR::Type::Bits::get(@1, 1); }
1106+
| BIT l_angle nonGrtExpression r_angle { $$ = IR::Type_Bits::get(@1+@4, $3, false); }
1107+
| BOOL { $$ = IR::Type_Boolean::get(@1); }
11071108
| ERROR { $$ = new IR::Type_Name(@1, new IR::Path(IR::ID(@1, "error"_cs))); }
1108-
| BIT { $$ = IR::Type::Bits::get(@1, 1); }
1109-
| STRING { $$ = IR::Type::String::get(@1); }
11101109
| INT { $$ = IR::Type_InfInt::get(@1); }
1111-
| BIT l_angle nonGrtExpression r_angle
1112-
{ $$ = IR::Type_Bits::get(@1+@4, $3, false); }
1113-
| INT l_angle nonGrtExpression r_angle
1114-
{ $$ = IR::Type_Bits::get(@1+@4, $3, true); }
1115-
| VARBIT l_angle nonGrtExpression r_angle
1116-
{ $$ = IR::Type_Varbits::get(@1+@4, $3); }
1110+
| INT l_angle nonGrtExpression r_angle { $$ = IR::Type_Bits::get(@1+@4, $3, true); }
1111+
| MATCH_KIND { $$ = IR::Type_MatchKind::get(@1); }
1112+
| STRING { $$ = IR::Type::String::get(@1); }
1113+
| VARBIT l_angle nonGrtExpression r_angle { $$ = IR::Type_Varbits::get(@1+@4, $3); }
11171114
;
11181115

11191116
typeOrVoid

0 commit comments

Comments
 (0)