Skip to content

Commit 01e3f47

Browse files
authored
Merge pull request #3177 from masatake/yacc-rewrite
Yacc: rewrite the parser
2 parents df3e2f5 + fece18c commit 01e3f47

File tree

13 files changed

+550
-244
lines changed

13 files changed

+550
-244
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
x input.y /^int x;$/;" v line:2 typeref:typename:int
2-
y input.y /^int y;/;" v line:8 typeref:typename:int
2+
y input.y /^int y;$/;" v line:8 typeref:typename:int

Units/parser-yacc.r/nested.d/expected.tags

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,48 @@
1-
CfgFile input.y /^CfgFile $/;" l language:YACC
2-
CfgEntryList input.y /^CfgEntryList : CfgEntryList CfgEntry$/;" l language:YACC
3-
CfgEntry input.y /^CfgEntry : EventDef ActionDef$/;" l language:YACC
4-
VarDef input.y /^VarDef : Ident EQUALS NameSpec$/;" l language:YACC
5-
EventDef input.y /^EventDef : EventType OPAREN OptNameSpec CPAREN$/;" l language:YACC
6-
EventType input.y /^EventType : BELL { $$= XkbBellNotify; }$/;" l language:YACC
7-
ActionDef input.y /^ActionDef : ActionType OptString$/;" l language:YACC
8-
ActionType input.y /^ActionType : NONE { $$ = NoAction; }$/;" l language:YACC
9-
OptNameSpec input.y /^OptNameSpec : NameSpec { $$= $1; }$/;" l language:YACC
10-
NameSpec input.y /^NameSpec : Ident { $$= $1; }$/;" l language:YACC
11-
Ident input.y /^Ident : IDENT { $$= scanStr; scanStr= NULL; }$/;" l language:YACC
12-
OptString input.y /^OptString : String { $$= $1; }$/;" l language:YACC
13-
String input.y /^String : STRING { $$= scanStr; scanStr= NULL; }$/;" l language:YACC
1+
END_OF_FILE input.y /^ END_OF_FILE 0$/;" t language:YACC
2+
ERROR input.y /^ ERROR 255$/;" t language:YACC
3+
BELL input.y /^ BELL 1$/;" t language:YACC
4+
ACCESSX input.y /^ ACCESSX 2$/;" t language:YACC
5+
MESSAGE input.y /^ MESSAGE 3$/;" t language:YACC
6+
NONE input.y /^ NONE 20$/;" t language:YACC
7+
IGNORE input.y /^ IGNORE 21$/;" t language:YACC
8+
ECHO input.y /^ ECHO 22$/;" t language:YACC
9+
PRINT_EV input.y /^ PRINT_EV 23$/;" t language:YACC
10+
SHELL input.y /^ SHELL 24$/;" t language:YACC
11+
SOUND input.y /^ SOUND 25$/;" t language:YACC
12+
EQUALS input.y /^ EQUALS 40$/;" t language:YACC
13+
PLUS input.y /^ PLUS 41$/;" t language:YACC
14+
MINUS input.y /^ MINUS 42$/;" t language:YACC
15+
DIVIDE input.y /^ DIVIDE 43$/;" t language:YACC
16+
TIMES input.y /^ TIMES 44$/;" t language:YACC
17+
OBRACE input.y /^ OBRACE 45$/;" t language:YACC
18+
CBRACE input.y /^ CBRACE 46$/;" t language:YACC
19+
OPAREN input.y /^ OPAREN 47$/;" t language:YACC
20+
CPAREN input.y /^ CPAREN 48$/;" t language:YACC
21+
OBRACKET input.y /^ OBRACKET 49$/;" t language:YACC
22+
CBRACKET input.y /^ CBRACKET 50$/;" t language:YACC
23+
DOT input.y /^ DOT 51$/;" t language:YACC
24+
COMMA input.y /^ COMMA 52$/;" t language:YACC
25+
SEMI input.y /^ SEMI 53$/;" t language:YACC
26+
EXCLAM input.y /^ EXCLAM 54$/;" t language:YACC
27+
INVERT input.y /^ INVERT 55$/;" t language:YACC
28+
STRING input.y /^ STRING 60$/;" t language:YACC
29+
INTEGER input.y /^ INTEGER 61$/;" t language:YACC
30+
FLOAT input.y /^ FLOAT 62$/;" t language:YACC
31+
IDENT input.y /^ IDENT 63$/;" t language:YACC
32+
KEYNAME input.y /^ KEYNAME 64$/;" t language:YACC
33+
CfgFile input.y /^CfgFile $/;" l language:YACC typeref:typename:entry
34+
CfgEntryList input.y /^CfgEntryList : CfgEntryList CfgEntry$/;" l language:YACC typeref:typename:entry
35+
CfgEntry input.y /^CfgEntry : EventDef ActionDef$/;" l language:YACC typeref:typename:entry
36+
VarDef input.y /^VarDef : Ident EQUALS NameSpec$/;" l language:YACC typeref:typename:entry
37+
EventDef input.y /^EventDef : EventType OPAREN OptNameSpec CPAREN$/;" l language:YACC typeref:typename:entry
38+
EventType input.y /^EventType : BELL { $$= XkbBellNotify; }$/;" l language:YACC typeref:typename:ival
39+
ActionDef input.y /^ActionDef : ActionType OptString$/;" l language:YACC typeref:typename:act
40+
ActionType input.y /^ActionType : NONE { $$ = NoAction; }$/;" l language:YACC typeref:typename:ival
41+
OptNameSpec input.y /^OptNameSpec : NameSpec { $$= $1; }$/;" l language:YACC typeref:typename:str
42+
NameSpec input.y /^NameSpec : Ident { $$= $1; }$/;" l language:YACC typeref:typename:str
43+
Ident input.y /^Ident : IDENT { $$= scanStr; scanStr= NULL; }$/;" l language:YACC typeref:typename:str
44+
OptString input.y /^OptString : String { $$= $1; }$/;" l language:YACC typeref:typename:str
45+
String input.y /^String : STRING { $$= scanStr; scanStr= NULL; }$/;" l language:YACC typeref:typename:str
1446
YYDEBUG input.y /^#define YYDEBUG /;" d language:C file: extras:fileScope,guest
1547
DEBUG_VAR input.y /^#define DEBUG_VAR /;" d language:C file: extras:fileScope,guest
1648
__anon5f5ae8c8010a input.y /union {$/;" u language:C file: extras:fileScope,guest,anonymous

Units/parser-yacc.r/not-union.d/expected.tags

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
HOSTCOND input.y /^%token HOSTCOND DCOND SCOND DPORT SPORT LEQ GEQ NEQ AUTOBOUND$/;" t language:YACC
2+
DCOND input.y /^%token HOSTCOND DCOND SCOND DPORT SPORT LEQ GEQ NEQ AUTOBOUND$/;" t language:YACC
3+
SCOND input.y /^%token HOSTCOND DCOND SCOND DPORT SPORT LEQ GEQ NEQ AUTOBOUND$/;" t language:YACC
4+
DPORT input.y /^%token HOSTCOND DCOND SCOND DPORT SPORT LEQ GEQ NEQ AUTOBOUND$/;" t language:YACC
5+
SPORT input.y /^%token HOSTCOND DCOND SCOND DPORT SPORT LEQ GEQ NEQ AUTOBOUND$/;" t language:YACC
6+
LEQ input.y /^%token HOSTCOND DCOND SCOND DPORT SPORT LEQ GEQ NEQ AUTOBOUND$/;" t language:YACC
7+
GEQ input.y /^%token HOSTCOND DCOND SCOND DPORT SPORT LEQ GEQ NEQ AUTOBOUND$/;" t language:YACC
8+
NEQ input.y /^%token HOSTCOND DCOND SCOND DPORT SPORT LEQ GEQ NEQ AUTOBOUND$/;" t language:YACC
9+
AUTOBOUND input.y /^%token HOSTCOND DCOND SCOND DPORT SPORT LEQ GEQ NEQ AUTOBOUND$/;" t language:YACC
110
applet input.y /^applet: null expr$/;" l language:YACC
211
null input.y /^null: \/* NOTHING *\/ { $$ = NULL; }$/;" l language:YACC
312
expr input.y /^expr: DCOND HOSTCOND$/;" l language:YACC

main/lregex.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2924,6 +2924,9 @@ static int makePromiseForAreaSpecifiedWithOffsets (const char *parser,
29242924
unsigned long startLineOffset = getInputFileOffsetForLine (startLine);
29252925
unsigned long endLineOffset = getInputFileOffsetForLine (endLine);
29262926

2927+
Assert(startOffset >= startLineOffset);
2928+
Assert(endOffset >= endLineOffset);
2929+
29272930
return makePromise (parser,
29282931
startLine, startOffset - startLineOffset,
29292932
endLine, endOffset - endLineOffset,

main/parsers_p.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@
164164
VhdlParser, \
165165
VimParser, \
166166
WindResParser, \
167-
YaccParser, \
167+
YACCParser, \
168168
YumRepoParser, \
169169
ZephirParser
170170

main/promise.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "xtag.h"
2222
#include "numarray.h"
2323
#include "routines.h"
24+
#include "options.h"
2425

2526
#include <string.h>
2627

@@ -70,6 +71,10 @@ int makePromise (const char *parser,
7071
int r;
7172
langType lang = LANG_IGNORE;
7273

74+
verbose("makePromise: %s start(line: %lu, offset: %lu, srcline: %lu), end(line: %lu, offset: %lu)\n",
75+
parser? parser: "*", startLine, startCharOffset, sourceLineOffset,
76+
endLine, endCharOffset);
77+
7378
if ((!isThinStreamSpec(startLine,
7479
startCharOffset,
7580
endLine,

main/read.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ extern MIOPos getInputFilePositionForLine (unsigned int line)
191191
extern long getInputFileOffsetForLine (unsigned int line)
192192
{
193193
compoundPos *cpos = getInputFileCompoundPosForLine (line);
194-
return cpos->offset;
194+
return cpos->offset - (File.bomFound? 3: 0);
195195
}
196196

197197
extern langType getInputLanguage (void)
@@ -362,6 +362,9 @@ extern unsigned long getInputLineNumberForFileOffset(long offset)
362362
{
363363
compoundPos *p;
364364

365+
if (File.bomFound)
366+
offset += 3;
367+
365368
p = bsearch (&offset, File.lineFposMap.pos, File.lineFposMap.count, sizeof (compoundPos),
366369
compoundPosForOffset);
367370
if (p == NULL)

0 commit comments

Comments
 (0)