2026-03-19 15:23:48 -07:00
|
|
|
# Generated from C.g4 by ANTLR 4.13.2
|
2019-01-04 17:35:10 +08:00
|
|
|
# encoding: utf-8
|
|
|
|
|
from antlr4 import *
|
|
|
|
|
from io import StringIO
|
|
|
|
|
import sys
|
2026-02-26 15:58:36 -05:00
|
|
|
if sys.version_info[1] > 5:
|
|
|
|
|
from typing import TextIO
|
|
|
|
|
else:
|
|
|
|
|
from typing.io import TextIO
|
2019-01-04 17:35:10 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
## @file
|
|
|
|
|
# The file defines the parser for C source files.
|
|
|
|
|
#
|
|
|
|
|
# THIS FILE IS AUTO-GENENERATED. PLEASE DON NOT MODIFY THIS FILE.
|
|
|
|
|
# This file is generated by running:
|
2026-03-19 15:23:48 -07:00
|
|
|
# java org.antlr.Tool C.g4
|
2019-01-04 17:35:10 +08:00
|
|
|
#
|
|
|
|
|
# Copyright (c) 2009 - 2010, Intel Corporation All rights reserved.
|
2019-04-03 16:03:11 -07:00
|
|
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
2019-01-04 17:35:10 +08:00
|
|
|
##
|
|
|
|
|
|
|
|
|
|
import Ecc.CodeFragment as CodeFragment
|
|
|
|
|
import Ecc.FileProfile as FileProfile
|
|
|
|
|
|
|
|
|
|
def serializedATN():
|
2026-03-19 15:23:48 -07:00
|
|
|
return [
|
|
|
|
|
4,1,105,894,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,
|
|
|
|
|
7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,
|
|
|
|
|
13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,
|
|
|
|
|
20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,
|
|
|
|
|
26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2,
|
|
|
|
|
33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7,
|
|
|
|
|
39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,2,
|
|
|
|
|
46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,52,7,
|
|
|
|
|
52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,2,
|
|
|
|
|
59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2,65,7,
|
|
|
|
|
65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,1,0,5,0,144,
|
|
|
|
|
8,0,10,0,12,0,147,9,0,1,1,3,1,150,8,1,1,1,1,1,5,1,154,8,1,10,1,12,
|
|
|
|
|
1,157,9,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,165,8,1,3,1,167,8,1,1,2,3,
|
|
|
|
|
2,170,8,2,1,2,1,2,4,2,174,8,2,11,2,12,2,175,1,2,1,2,1,2,3,2,181,
|
|
|
|
|
8,2,1,2,1,2,1,3,1,3,1,3,4,3,188,8,3,11,3,12,3,189,1,4,1,4,3,4,194,
|
|
|
|
|
8,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,202,8,4,1,4,1,4,1,4,3,4,207,8,4,
|
|
|
|
|
1,5,1,5,1,5,5,5,212,8,5,10,5,12,5,215,9,5,1,6,1,6,1,6,3,6,220,8,
|
|
|
|
|
6,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,
|
|
|
|
|
8,1,8,1,8,1,8,5,8,241,8,8,10,8,12,8,244,9,8,1,8,1,8,3,8,248,8,8,
|
|
|
|
|
1,9,1,9,1,10,1,10,3,10,254,8,10,1,10,1,10,1,10,1,10,1,10,1,10,1,
|
|
|
|
|
10,3,10,263,8,10,1,11,1,11,1,12,4,12,268,8,12,11,12,12,12,269,1,
|
|
|
|
|
13,1,13,1,13,1,13,1,14,1,14,4,14,278,8,14,11,14,12,14,279,1,15,1,
|
|
|
|
|
15,1,15,5,15,285,8,15,10,15,12,15,288,9,15,1,16,1,16,1,16,3,16,293,
|
|
|
|
|
8,16,1,16,1,16,3,16,297,8,16,1,17,1,17,1,17,1,17,3,17,303,8,17,1,
|
|
|
|
|
17,1,17,1,17,1,17,1,17,1,17,1,17,3,17,312,8,17,1,17,1,17,1,17,1,
|
|
|
|
|
17,3,17,318,8,17,1,18,1,18,1,18,5,18,323,8,18,10,18,12,18,326,9,
|
|
|
|
|
18,1,19,1,19,1,19,3,19,331,8,19,1,20,1,20,1,21,3,21,336,8,21,1,21,
|
|
|
|
|
3,21,339,8,21,1,21,3,21,342,8,21,1,21,3,21,345,8,21,1,21,1,21,3,
|
|
|
|
|
21,349,8,21,1,22,1,22,5,22,353,8,22,10,22,12,22,356,9,22,1,22,1,
|
|
|
|
|
22,3,22,360,8,22,1,22,1,22,1,22,4,22,365,8,22,11,22,12,22,366,3,
|
|
|
|
|
22,369,8,22,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,
|
|
|
|
|
23,1,23,1,23,1,23,1,23,1,23,3,23,387,8,23,1,24,1,24,4,24,391,8,24,
|
|
|
|
|
11,24,12,24,392,1,24,3,24,396,8,24,1,24,1,24,1,24,3,24,401,8,24,
|
|
|
|
|
1,25,1,25,1,25,3,25,406,8,25,1,25,3,25,409,8,25,1,26,1,26,1,26,3,
|
|
|
|
|
26,414,8,26,1,26,5,26,417,8,26,10,26,12,26,420,9,26,1,27,1,27,1,
|
|
|
|
|
27,5,27,425,8,27,10,27,12,27,428,9,27,1,27,3,27,431,8,27,1,27,5,
|
|
|
|
|
27,434,8,27,10,27,12,27,437,9,27,1,27,3,27,440,8,27,1,28,1,28,1,
|
|
|
|
|
28,5,28,445,8,28,10,28,12,28,448,9,28,1,29,1,29,3,29,452,8,29,1,
|
|
|
|
|
29,3,29,455,8,29,1,30,1,30,3,30,459,8,30,1,30,3,30,462,8,30,1,31,
|
|
|
|
|
1,31,1,31,1,31,1,31,3,31,469,8,31,1,31,5,31,472,8,31,10,31,12,31,
|
|
|
|
|
475,9,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,
|
|
|
|
|
1,32,3,32,489,8,32,1,33,1,33,1,33,1,33,3,33,495,8,33,1,33,1,33,3,
|
|
|
|
|
33,499,8,33,1,34,1,34,1,34,5,34,504,8,34,10,34,12,34,507,9,34,1,
|
|
|
|
|
35,1,35,3,35,511,8,35,1,35,1,35,1,35,3,35,516,8,35,5,35,518,8,35,
|
|
|
|
|
10,35,12,35,521,9,35,1,36,1,36,1,36,1,36,1,36,5,36,528,8,36,10,36,
|
|
|
|
|
12,36,531,9,36,1,37,1,37,1,37,1,37,1,37,1,37,1,37,5,37,540,8,37,
|
|
|
|
|
10,37,12,37,543,9,37,1,38,1,38,1,38,1,38,1,38,1,38,3,38,551,8,38,
|
|
|
|
|
1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,
|
|
|
|
|
1,39,1,39,3,39,568,8,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,
|
|
|
|
|
1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,
|
|
|
|
|
1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,5,40,599,8,40,10,40,12,40,
|
|
|
|
|
602,9,40,1,41,1,41,1,41,5,41,607,8,41,10,41,12,41,610,9,41,1,42,
|
|
|
|
|
1,42,1,43,1,43,1,43,1,43,1,43,1,43,3,43,620,8,43,1,44,1,44,1,44,
|
|
|
|
|
1,44,1,44,5,44,627,8,44,10,44,12,44,630,9,44,1,44,4,44,633,8,44,
|
|
|
|
|
11,44,12,44,634,4,44,637,8,44,11,44,12,44,638,1,44,5,44,642,8,44,
|
|
|
|
|
10,44,12,44,645,9,44,1,44,3,44,648,8,44,1,45,1,45,1,45,5,45,653,
|
|
|
|
|
8,45,10,45,12,45,656,9,45,1,46,1,46,1,47,1,47,1,47,1,47,1,47,3,47,
|
|
|
|
|
665,8,47,1,48,1,48,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,1,50,
|
|
|
|
|
3,50,678,8,50,1,51,1,51,1,51,5,51,683,8,51,10,51,12,51,686,9,51,
|
|
|
|
|
1,52,1,52,1,52,5,52,691,8,52,10,52,12,52,694,9,52,1,53,1,53,1,53,
|
|
|
|
|
5,53,699,8,53,10,53,12,53,702,9,53,1,54,1,54,1,54,5,54,707,8,54,
|
|
|
|
|
10,54,12,54,710,9,54,1,55,1,55,1,55,5,55,715,8,55,10,55,12,55,718,
|
|
|
|
|
9,55,1,56,1,56,1,56,5,56,723,8,56,10,56,12,56,726,9,56,1,57,1,57,
|
|
|
|
|
1,57,5,57,731,8,57,10,57,12,57,734,9,57,1,58,1,58,1,58,5,58,739,
|
|
|
|
|
8,58,10,58,12,58,742,9,58,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,
|
|
|
|
|
1,59,1,59,1,59,3,59,755,8,59,1,60,3,60,758,8,60,1,60,1,60,1,60,5,
|
|
|
|
|
60,763,8,60,10,60,12,60,766,9,60,1,60,1,60,1,60,1,61,1,61,1,61,5,
|
|
|
|
|
61,774,8,61,10,61,12,61,777,9,61,1,61,1,61,1,62,1,62,1,62,5,62,784,
|
|
|
|
|
8,62,10,62,12,62,787,9,62,1,62,1,62,1,63,1,63,1,63,5,63,794,8,63,
|
|
|
|
|
10,63,12,63,797,9,63,1,63,3,63,800,8,63,1,63,3,63,803,8,63,1,63,
|
|
|
|
|
1,63,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,3,64,
|
|
|
|
|
818,8,64,1,65,1,65,5,65,822,8,65,10,65,12,65,825,9,65,1,65,3,65,
|
|
|
|
|
828,8,65,1,65,1,65,1,66,4,66,833,8,66,11,66,12,66,834,1,67,1,67,
|
|
|
|
|
1,67,1,67,3,67,841,8,67,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,
|
|
|
|
|
3,68,851,8,68,1,68,1,68,1,68,1,68,1,68,1,68,3,68,859,8,68,1,69,1,
|
|
|
|
|
69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,
|
|
|
|
|
69,1,69,3,69,877,8,69,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,
|
|
|
|
|
70,1,70,1,70,1,70,1,70,3,70,892,8,70,1,70,0,0,71,0,2,4,6,8,10,12,
|
|
|
|
|
14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,
|
|
|
|
|
58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,
|
|
|
|
|
102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,
|
|
|
|
|
134,136,138,140,0,10,1,0,6,10,1,0,21,22,1,0,25,37,3,0,42,42,44,45,
|
|
|
|
|
53,55,2,0,5,5,56,65,1,0,71,72,1,0,73,76,1,0,77,78,1,0,2,2,1,0,20,
|
|
|
|
|
20,982,0,145,1,0,0,0,2,166,1,0,0,0,4,169,1,0,0,0,6,187,1,0,0,0,8,
|
|
|
|
|
206,1,0,0,0,10,208,1,0,0,0,12,216,1,0,0,0,14,221,1,0,0,0,16,247,
|
|
|
|
|
1,0,0,0,18,249,1,0,0,0,20,262,1,0,0,0,22,264,1,0,0,0,24,267,1,0,
|
|
|
|
|
0,0,26,271,1,0,0,0,28,277,1,0,0,0,30,281,1,0,0,0,32,296,1,0,0,0,
|
|
|
|
|
34,317,1,0,0,0,36,319,1,0,0,0,38,327,1,0,0,0,40,332,1,0,0,0,42,348,
|
|
|
|
|
1,0,0,0,44,368,1,0,0,0,46,386,1,0,0,0,48,400,1,0,0,0,50,402,1,0,
|
|
|
|
|
0,0,52,410,1,0,0,0,54,439,1,0,0,0,56,441,1,0,0,0,58,454,1,0,0,0,
|
|
|
|
|
60,461,1,0,0,0,62,468,1,0,0,0,64,488,1,0,0,0,66,498,1,0,0,0,68,500,
|
|
|
|
|
1,0,0,0,70,508,1,0,0,0,72,522,1,0,0,0,74,532,1,0,0,0,76,550,1,0,
|
|
|
|
|
0,0,78,567,1,0,0,0,80,569,1,0,0,0,82,603,1,0,0,0,84,611,1,0,0,0,
|
|
|
|
|
86,619,1,0,0,0,88,647,1,0,0,0,90,649,1,0,0,0,92,657,1,0,0,0,94,664,
|
|
|
|
|
1,0,0,0,96,666,1,0,0,0,98,668,1,0,0,0,100,670,1,0,0,0,102,679,1,
|
|
|
|
|
0,0,0,104,687,1,0,0,0,106,695,1,0,0,0,108,703,1,0,0,0,110,711,1,
|
|
|
|
|
0,0,0,112,719,1,0,0,0,114,727,1,0,0,0,116,735,1,0,0,0,118,754,1,
|
|
|
|
|
0,0,0,120,757,1,0,0,0,122,770,1,0,0,0,124,780,1,0,0,0,126,790,1,
|
|
|
|
|
0,0,0,128,817,1,0,0,0,130,819,1,0,0,0,132,832,1,0,0,0,134,840,1,
|
|
|
|
|
0,0,0,136,858,1,0,0,0,138,876,1,0,0,0,140,891,1,0,0,0,142,144,3,
|
|
|
|
|
2,1,0,143,142,1,0,0,0,144,147,1,0,0,0,145,143,1,0,0,0,145,146,1,
|
|
|
|
|
0,0,0,146,1,1,0,0,0,147,145,1,0,0,0,148,150,3,6,3,0,149,148,1,0,
|
|
|
|
|
0,0,149,150,1,0,0,0,150,151,1,0,0,0,151,155,3,42,21,0,152,154,3,
|
|
|
|
|
8,4,0,153,152,1,0,0,0,154,157,1,0,0,0,155,153,1,0,0,0,155,156,1,
|
|
|
|
|
0,0,0,156,158,1,0,0,0,157,155,1,0,0,0,158,159,5,1,0,0,159,167,1,
|
|
|
|
|
0,0,0,160,167,3,4,2,0,161,167,3,8,4,0,162,164,3,126,63,0,163,165,
|
|
|
|
|
5,2,0,0,164,163,1,0,0,0,164,165,1,0,0,0,165,167,1,0,0,0,166,149,
|
|
|
|
|
1,0,0,0,166,160,1,0,0,0,166,161,1,0,0,0,166,162,1,0,0,0,167,3,1,
|
|
|
|
|
0,0,0,168,170,3,6,3,0,169,168,1,0,0,0,169,170,1,0,0,0,170,171,1,
|
|
|
|
|
0,0,0,171,180,3,42,21,0,172,174,3,8,4,0,173,172,1,0,0,0,174,175,
|
|
|
|
|
1,0,0,0,175,173,1,0,0,0,175,176,1,0,0,0,176,177,1,0,0,0,177,178,
|
|
|
|
|
3,130,65,0,178,181,1,0,0,0,179,181,3,130,65,0,180,173,1,0,0,0,180,
|
|
|
|
|
179,1,0,0,0,181,182,1,0,0,0,182,183,6,2,-1,0,183,5,1,0,0,0,184,188,
|
|
|
|
|
3,14,7,0,185,188,3,16,8,0,186,188,3,40,20,0,187,184,1,0,0,0,187,
|
|
|
|
|
185,1,0,0,0,187,186,1,0,0,0,188,189,1,0,0,0,189,187,1,0,0,0,189,
|
|
|
|
|
190,1,0,0,0,190,7,1,0,0,0,191,193,5,3,0,0,192,194,3,6,3,0,193,192,
|
|
|
|
|
1,0,0,0,193,194,1,0,0,0,194,195,1,0,0,0,195,196,3,10,5,0,196,197,
|
|
|
|
|
5,2,0,0,197,198,6,4,-1,0,198,207,1,0,0,0,199,201,3,6,3,0,200,202,
|
|
|
|
|
3,10,5,0,201,200,1,0,0,0,201,202,1,0,0,0,202,203,1,0,0,0,203,204,
|
|
|
|
|
5,2,0,0,204,205,6,4,-1,0,205,207,1,0,0,0,206,191,1,0,0,0,206,199,
|
|
|
|
|
1,0,0,0,207,9,1,0,0,0,208,213,3,12,6,0,209,210,5,4,0,0,210,212,3,
|
|
|
|
|
12,6,0,211,209,1,0,0,0,212,215,1,0,0,0,213,211,1,0,0,0,213,214,1,
|
|
|
|
|
0,0,0,214,11,1,0,0,0,215,213,1,0,0,0,216,219,3,42,21,0,217,218,5,
|
|
|
|
|
5,0,0,218,220,3,66,33,0,219,217,1,0,0,0,219,220,1,0,0,0,220,13,1,
|
|
|
|
|
0,0,0,221,222,7,0,0,0,222,15,1,0,0,0,223,248,5,11,0,0,224,248,5,
|
|
|
|
|
12,0,0,225,248,5,13,0,0,226,248,5,14,0,0,227,248,5,15,0,0,228,248,
|
|
|
|
|
5,16,0,0,229,248,5,17,0,0,230,248,5,18,0,0,231,248,5,19,0,0,232,
|
|
|
|
|
233,3,20,10,0,233,234,6,8,-1,0,234,248,1,0,0,0,235,236,3,34,17,0,
|
|
|
|
|
236,237,6,8,-1,0,237,248,1,0,0,0,238,242,5,93,0,0,239,241,3,40,20,
|
|
|
|
|
0,240,239,1,0,0,0,241,244,1,0,0,0,242,240,1,0,0,0,242,243,1,0,0,
|
|
|
|
|
0,243,245,1,0,0,0,244,242,1,0,0,0,245,248,3,42,21,0,246,248,3,18,
|
|
|
|
|
9,0,247,223,1,0,0,0,247,224,1,0,0,0,247,225,1,0,0,0,247,226,1,0,
|
|
|
|
|
0,0,247,227,1,0,0,0,247,228,1,0,0,0,247,229,1,0,0,0,247,230,1,0,
|
|
|
|
|
0,0,247,231,1,0,0,0,247,232,1,0,0,0,247,235,1,0,0,0,247,238,1,0,
|
|
|
|
|
0,0,247,246,1,0,0,0,248,17,1,0,0,0,249,250,5,93,0,0,250,19,1,0,0,
|
|
|
|
|
0,251,253,3,22,11,0,252,254,5,93,0,0,253,252,1,0,0,0,253,254,1,0,
|
|
|
|
|
0,0,254,255,1,0,0,0,255,256,5,1,0,0,256,257,3,24,12,0,257,258,5,
|
|
|
|
|
20,0,0,258,263,1,0,0,0,259,260,3,22,11,0,260,261,5,93,0,0,261,263,
|
|
|
|
|
1,0,0,0,262,251,1,0,0,0,262,259,1,0,0,0,263,21,1,0,0,0,264,265,7,
|
|
|
|
|
1,0,0,265,23,1,0,0,0,266,268,3,26,13,0,267,266,1,0,0,0,268,269,1,
|
|
|
|
|
0,0,0,269,267,1,0,0,0,269,270,1,0,0,0,270,25,1,0,0,0,271,272,3,28,
|
|
|
|
|
14,0,272,273,3,30,15,0,273,274,5,2,0,0,274,27,1,0,0,0,275,278,3,
|
|
|
|
|
40,20,0,276,278,3,16,8,0,277,275,1,0,0,0,277,276,1,0,0,0,278,279,
|
|
|
|
|
1,0,0,0,279,277,1,0,0,0,279,280,1,0,0,0,280,29,1,0,0,0,281,286,3,
|
|
|
|
|
32,16,0,282,283,5,4,0,0,283,285,3,32,16,0,284,282,1,0,0,0,285,288,
|
|
|
|
|
1,0,0,0,286,284,1,0,0,0,286,287,1,0,0,0,287,31,1,0,0,0,288,286,1,
|
|
|
|
|
0,0,0,289,292,3,42,21,0,290,291,5,23,0,0,291,293,3,92,46,0,292,290,
|
|
|
|
|
1,0,0,0,292,293,1,0,0,0,293,297,1,0,0,0,294,295,5,23,0,0,295,297,
|
|
|
|
|
3,92,46,0,296,289,1,0,0,0,296,294,1,0,0,0,297,33,1,0,0,0,298,299,
|
|
|
|
|
5,24,0,0,299,300,5,1,0,0,300,302,3,36,18,0,301,303,5,4,0,0,302,301,
|
|
|
|
|
1,0,0,0,302,303,1,0,0,0,303,304,1,0,0,0,304,305,5,20,0,0,305,318,
|
|
|
|
|
1,0,0,0,306,307,5,24,0,0,307,308,5,93,0,0,308,309,5,1,0,0,309,311,
|
|
|
|
|
3,36,18,0,310,312,5,4,0,0,311,310,1,0,0,0,311,312,1,0,0,0,312,313,
|
|
|
|
|
1,0,0,0,313,314,5,20,0,0,314,318,1,0,0,0,315,316,5,24,0,0,316,318,
|
|
|
|
|
5,93,0,0,317,298,1,0,0,0,317,306,1,0,0,0,317,315,1,0,0,0,318,35,
|
|
|
|
|
1,0,0,0,319,324,3,38,19,0,320,321,5,4,0,0,321,323,3,38,19,0,322,
|
|
|
|
|
320,1,0,0,0,323,326,1,0,0,0,324,322,1,0,0,0,324,325,1,0,0,0,325,
|
|
|
|
|
37,1,0,0,0,326,324,1,0,0,0,327,330,5,93,0,0,328,329,5,5,0,0,329,
|
|
|
|
|
331,3,92,46,0,330,328,1,0,0,0,330,331,1,0,0,0,331,39,1,0,0,0,332,
|
|
|
|
|
333,7,2,0,0,333,41,1,0,0,0,334,336,3,48,24,0,335,334,1,0,0,0,335,
|
|
|
|
|
336,1,0,0,0,336,338,1,0,0,0,337,339,5,34,0,0,338,337,1,0,0,0,338,
|
|
|
|
|
339,1,0,0,0,339,341,1,0,0,0,340,342,5,35,0,0,341,340,1,0,0,0,341,
|
|
|
|
|
342,1,0,0,0,342,344,1,0,0,0,343,345,5,36,0,0,344,343,1,0,0,0,344,
|
|
|
|
|
345,1,0,0,0,345,346,1,0,0,0,346,349,3,44,22,0,347,349,3,48,24,0,
|
|
|
|
|
348,335,1,0,0,0,348,347,1,0,0,0,349,43,1,0,0,0,350,354,5,93,0,0,
|
|
|
|
|
351,353,3,46,23,0,352,351,1,0,0,0,353,356,1,0,0,0,354,352,1,0,0,
|
|
|
|
|
0,354,355,1,0,0,0,355,369,1,0,0,0,356,354,1,0,0,0,357,359,5,38,0,
|
|
|
|
|
0,358,360,5,34,0,0,359,358,1,0,0,0,359,360,1,0,0,0,360,361,1,0,0,
|
|
|
|
|
0,361,362,3,42,21,0,362,364,5,39,0,0,363,365,3,46,23,0,364,363,1,
|
|
|
|
|
0,0,0,365,366,1,0,0,0,366,364,1,0,0,0,366,367,1,0,0,0,367,369,1,
|
|
|
|
|
0,0,0,368,350,1,0,0,0,368,357,1,0,0,0,369,45,1,0,0,0,370,371,5,40,
|
|
|
|
|
0,0,371,372,3,92,46,0,372,373,5,41,0,0,373,387,1,0,0,0,374,375,5,
|
|
|
|
|
40,0,0,375,387,5,41,0,0,376,377,5,38,0,0,377,378,3,50,25,0,378,379,
|
|
|
|
|
5,39,0,0,379,387,1,0,0,0,380,381,5,38,0,0,381,382,3,56,28,0,382,
|
|
|
|
|
383,5,39,0,0,383,387,1,0,0,0,384,385,5,38,0,0,385,387,5,39,0,0,386,
|
|
|
|
|
370,1,0,0,0,386,374,1,0,0,0,386,376,1,0,0,0,386,380,1,0,0,0,386,
|
|
|
|
|
384,1,0,0,0,387,47,1,0,0,0,388,390,5,42,0,0,389,391,3,40,20,0,390,
|
|
|
|
|
389,1,0,0,0,391,392,1,0,0,0,392,390,1,0,0,0,392,393,1,0,0,0,393,
|
|
|
|
|
395,1,0,0,0,394,396,3,48,24,0,395,394,1,0,0,0,395,396,1,0,0,0,396,
|
|
|
|
|
401,1,0,0,0,397,398,5,42,0,0,398,401,3,48,24,0,399,401,5,42,0,0,
|
|
|
|
|
400,388,1,0,0,0,400,397,1,0,0,0,400,399,1,0,0,0,401,49,1,0,0,0,402,
|
|
|
|
|
408,3,52,26,0,403,405,5,4,0,0,404,406,5,29,0,0,405,404,1,0,0,0,405,
|
|
|
|
|
406,1,0,0,0,406,407,1,0,0,0,407,409,5,43,0,0,408,403,1,0,0,0,408,
|
|
|
|
|
409,1,0,0,0,409,51,1,0,0,0,410,418,3,54,27,0,411,413,5,4,0,0,412,
|
|
|
|
|
414,5,29,0,0,413,412,1,0,0,0,413,414,1,0,0,0,414,415,1,0,0,0,415,
|
|
|
|
|
417,3,54,27,0,416,411,1,0,0,0,417,420,1,0,0,0,418,416,1,0,0,0,418,
|
|
|
|
|
419,1,0,0,0,419,53,1,0,0,0,420,418,1,0,0,0,421,426,3,6,3,0,422,425,
|
|
|
|
|
3,42,21,0,423,425,3,60,30,0,424,422,1,0,0,0,424,423,1,0,0,0,425,
|
|
|
|
|
428,1,0,0,0,426,424,1,0,0,0,426,427,1,0,0,0,427,430,1,0,0,0,428,
|
|
|
|
|
426,1,0,0,0,429,431,5,29,0,0,430,429,1,0,0,0,430,431,1,0,0,0,431,
|
|
|
|
|
440,1,0,0,0,432,434,3,48,24,0,433,432,1,0,0,0,434,437,1,0,0,0,435,
|
|
|
|
|
433,1,0,0,0,435,436,1,0,0,0,436,438,1,0,0,0,437,435,1,0,0,0,438,
|
|
|
|
|
440,5,93,0,0,439,421,1,0,0,0,439,435,1,0,0,0,440,55,1,0,0,0,441,
|
|
|
|
|
446,5,93,0,0,442,443,5,4,0,0,443,445,5,93,0,0,444,442,1,0,0,0,445,
|
|
|
|
|
448,1,0,0,0,446,444,1,0,0,0,446,447,1,0,0,0,447,57,1,0,0,0,448,446,
|
|
|
|
|
1,0,0,0,449,451,3,28,14,0,450,452,3,60,30,0,451,450,1,0,0,0,451,
|
|
|
|
|
452,1,0,0,0,452,455,1,0,0,0,453,455,3,18,9,0,454,449,1,0,0,0,454,
|
|
|
|
|
453,1,0,0,0,455,59,1,0,0,0,456,458,3,48,24,0,457,459,3,62,31,0,458,
|
|
|
|
|
457,1,0,0,0,458,459,1,0,0,0,459,462,1,0,0,0,460,462,3,62,31,0,461,
|
|
|
|
|
456,1,0,0,0,461,460,1,0,0,0,462,61,1,0,0,0,463,464,5,38,0,0,464,
|
|
|
|
|
465,3,60,30,0,465,466,5,39,0,0,466,469,1,0,0,0,467,469,3,64,32,0,
|
|
|
|
|
468,463,1,0,0,0,468,467,1,0,0,0,469,473,1,0,0,0,470,472,3,64,32,
|
|
|
|
|
0,471,470,1,0,0,0,472,475,1,0,0,0,473,471,1,0,0,0,473,474,1,0,0,
|
|
|
|
|
0,474,63,1,0,0,0,475,473,1,0,0,0,476,477,5,40,0,0,477,489,5,41,0,
|
|
|
|
|
0,478,479,5,40,0,0,479,480,3,92,46,0,480,481,5,41,0,0,481,489,1,
|
|
|
|
|
0,0,0,482,483,5,38,0,0,483,489,5,39,0,0,484,485,5,38,0,0,485,486,
|
|
|
|
|
3,50,25,0,486,487,5,39,0,0,487,489,1,0,0,0,488,476,1,0,0,0,488,478,
|
|
|
|
|
1,0,0,0,488,482,1,0,0,0,488,484,1,0,0,0,489,65,1,0,0,0,490,499,3,
|
|
|
|
|
94,47,0,491,492,5,1,0,0,492,494,3,68,34,0,493,495,5,4,0,0,494,493,
|
|
|
|
|
1,0,0,0,494,495,1,0,0,0,495,496,1,0,0,0,496,497,5,20,0,0,497,499,
|
|
|
|
|
1,0,0,0,498,490,1,0,0,0,498,491,1,0,0,0,499,67,1,0,0,0,500,505,3,
|
|
|
|
|
66,33,0,501,502,5,4,0,0,502,504,3,66,33,0,503,501,1,0,0,0,504,507,
|
|
|
|
|
1,0,0,0,505,503,1,0,0,0,505,506,1,0,0,0,506,69,1,0,0,0,507,505,1,
|
|
|
|
|
0,0,0,508,510,3,94,47,0,509,511,5,29,0,0,510,509,1,0,0,0,510,511,
|
|
|
|
|
1,0,0,0,511,519,1,0,0,0,512,513,5,4,0,0,513,515,3,94,47,0,514,516,
|
|
|
|
|
5,29,0,0,515,514,1,0,0,0,515,516,1,0,0,0,516,518,1,0,0,0,517,512,
|
|
|
|
|
1,0,0,0,518,521,1,0,0,0,519,517,1,0,0,0,519,520,1,0,0,0,520,71,1,
|
|
|
|
|
0,0,0,521,519,1,0,0,0,522,529,3,74,37,0,523,524,5,44,0,0,524,528,
|
|
|
|
|
3,74,37,0,525,526,5,45,0,0,526,528,3,74,37,0,527,523,1,0,0,0,527,
|
|
|
|
|
525,1,0,0,0,528,531,1,0,0,0,529,527,1,0,0,0,529,530,1,0,0,0,530,
|
|
|
|
|
73,1,0,0,0,531,529,1,0,0,0,532,541,3,76,38,0,533,534,5,42,0,0,534,
|
|
|
|
|
540,3,76,38,0,535,536,5,46,0,0,536,540,3,76,38,0,537,538,5,47,0,
|
|
|
|
|
0,538,540,3,76,38,0,539,533,1,0,0,0,539,535,1,0,0,0,539,537,1,0,
|
|
|
|
|
0,0,540,543,1,0,0,0,541,539,1,0,0,0,541,542,1,0,0,0,542,75,1,0,0,
|
|
|
|
|
0,543,541,1,0,0,0,544,545,5,38,0,0,545,546,3,58,29,0,546,547,5,39,
|
|
|
|
|
0,0,547,548,3,76,38,0,548,551,1,0,0,0,549,551,3,78,39,0,550,544,
|
|
|
|
|
1,0,0,0,550,549,1,0,0,0,551,77,1,0,0,0,552,568,3,80,40,0,553,554,
|
|
|
|
|
5,48,0,0,554,568,3,78,39,0,555,556,5,49,0,0,556,568,3,78,39,0,557,
|
|
|
|
|
558,3,84,42,0,558,559,3,76,38,0,559,568,1,0,0,0,560,561,5,50,0,0,
|
|
|
|
|
561,568,3,78,39,0,562,563,5,50,0,0,563,564,5,38,0,0,564,565,3,58,
|
|
|
|
|
29,0,565,566,5,39,0,0,566,568,1,0,0,0,567,552,1,0,0,0,567,553,1,
|
|
|
|
|
0,0,0,567,555,1,0,0,0,567,557,1,0,0,0,567,560,1,0,0,0,567,562,1,
|
|
|
|
|
0,0,0,568,79,1,0,0,0,569,570,3,86,43,0,570,600,6,40,-1,0,571,572,
|
|
|
|
|
5,40,0,0,572,573,3,90,45,0,573,574,5,41,0,0,574,599,1,0,0,0,575,
|
|
|
|
|
576,5,38,0,0,576,577,5,39,0,0,577,599,6,40,-1,0,578,579,5,38,0,0,
|
|
|
|
|
579,580,3,70,35,0,580,581,5,39,0,0,581,582,6,40,-1,0,582,599,1,0,
|
|
|
|
|
0,0,583,584,5,38,0,0,584,585,3,82,41,0,585,586,5,39,0,0,586,599,
|
|
|
|
|
1,0,0,0,587,588,5,51,0,0,588,589,5,93,0,0,589,599,6,40,-1,0,590,
|
|
|
|
|
591,5,42,0,0,591,592,5,93,0,0,592,599,6,40,-1,0,593,594,5,52,0,0,
|
|
|
|
|
594,595,5,93,0,0,595,599,6,40,-1,0,596,599,5,48,0,0,597,599,5,49,
|
|
|
|
|
0,0,598,571,1,0,0,0,598,575,1,0,0,0,598,578,1,0,0,0,598,583,1,0,
|
|
|
|
|
0,0,598,587,1,0,0,0,598,590,1,0,0,0,598,593,1,0,0,0,598,596,1,0,
|
|
|
|
|
0,0,598,597,1,0,0,0,599,602,1,0,0,0,600,598,1,0,0,0,600,601,1,0,
|
|
|
|
|
0,0,601,81,1,0,0,0,602,600,1,0,0,0,603,608,3,54,27,0,604,605,5,4,
|
|
|
|
|
0,0,605,607,3,54,27,0,606,604,1,0,0,0,607,610,1,0,0,0,608,606,1,
|
|
|
|
|
0,0,0,608,609,1,0,0,0,609,83,1,0,0,0,610,608,1,0,0,0,611,612,7,3,
|
|
|
|
|
0,0,612,85,1,0,0,0,613,620,5,93,0,0,614,620,3,88,44,0,615,616,5,
|
|
|
|
|
38,0,0,616,617,3,90,45,0,617,618,5,39,0,0,618,620,1,0,0,0,619,613,
|
|
|
|
|
1,0,0,0,619,614,1,0,0,0,619,615,1,0,0,0,620,87,1,0,0,0,621,648,5,
|
|
|
|
|
96,0,0,622,648,5,98,0,0,623,648,5,97,0,0,624,648,5,94,0,0,625,627,
|
|
|
|
|
5,93,0,0,626,625,1,0,0,0,627,630,1,0,0,0,628,626,1,0,0,0,628,629,
|
|
|
|
|
1,0,0,0,629,632,1,0,0,0,630,628,1,0,0,0,631,633,5,95,0,0,632,631,
|
|
|
|
|
1,0,0,0,633,634,1,0,0,0,634,632,1,0,0,0,634,635,1,0,0,0,635,637,
|
|
|
|
|
1,0,0,0,636,628,1,0,0,0,637,638,1,0,0,0,638,636,1,0,0,0,638,639,
|
|
|
|
|
1,0,0,0,639,643,1,0,0,0,640,642,5,93,0,0,641,640,1,0,0,0,642,645,
|
|
|
|
|
1,0,0,0,643,641,1,0,0,0,643,644,1,0,0,0,644,648,1,0,0,0,645,643,
|
|
|
|
|
1,0,0,0,646,648,5,99,0,0,647,621,1,0,0,0,647,622,1,0,0,0,647,623,
|
|
|
|
|
1,0,0,0,647,624,1,0,0,0,647,636,1,0,0,0,647,646,1,0,0,0,648,89,1,
|
|
|
|
|
0,0,0,649,654,3,94,47,0,650,651,5,4,0,0,651,653,3,94,47,0,652,650,
|
|
|
|
|
1,0,0,0,653,656,1,0,0,0,654,652,1,0,0,0,654,655,1,0,0,0,655,91,1,
|
|
|
|
|
0,0,0,656,654,1,0,0,0,657,658,3,100,50,0,658,93,1,0,0,0,659,660,
|
|
|
|
|
3,96,48,0,660,661,3,98,49,0,661,662,3,94,47,0,662,665,1,0,0,0,663,
|
|
|
|
|
665,3,100,50,0,664,659,1,0,0,0,664,663,1,0,0,0,665,95,1,0,0,0,666,
|
|
|
|
|
667,3,78,39,0,667,97,1,0,0,0,668,669,7,4,0,0,669,99,1,0,0,0,670,
|
|
|
|
|
677,3,102,51,0,671,672,5,66,0,0,672,673,3,90,45,0,673,674,5,23,0,
|
|
|
|
|
0,674,675,3,100,50,0,675,676,6,50,-1,0,676,678,1,0,0,0,677,671,1,
|
|
|
|
|
0,0,0,677,678,1,0,0,0,678,101,1,0,0,0,679,684,3,104,52,0,680,681,
|
|
|
|
|
5,67,0,0,681,683,3,104,52,0,682,680,1,0,0,0,683,686,1,0,0,0,684,
|
|
|
|
|
682,1,0,0,0,684,685,1,0,0,0,685,103,1,0,0,0,686,684,1,0,0,0,687,
|
|
|
|
|
692,3,106,53,0,688,689,5,68,0,0,689,691,3,106,53,0,690,688,1,0,0,
|
|
|
|
|
0,691,694,1,0,0,0,692,690,1,0,0,0,692,693,1,0,0,0,693,105,1,0,0,
|
|
|
|
|
0,694,692,1,0,0,0,695,700,3,108,54,0,696,697,5,69,0,0,697,699,3,
|
|
|
|
|
108,54,0,698,696,1,0,0,0,699,702,1,0,0,0,700,698,1,0,0,0,700,701,
|
|
|
|
|
1,0,0,0,701,107,1,0,0,0,702,700,1,0,0,0,703,708,3,110,55,0,704,705,
|
|
|
|
|
5,70,0,0,705,707,3,110,55,0,706,704,1,0,0,0,707,710,1,0,0,0,708,
|
|
|
|
|
706,1,0,0,0,708,709,1,0,0,0,709,109,1,0,0,0,710,708,1,0,0,0,711,
|
|
|
|
|
716,3,112,56,0,712,713,5,53,0,0,713,715,3,112,56,0,714,712,1,0,0,
|
|
|
|
|
0,715,718,1,0,0,0,716,714,1,0,0,0,716,717,1,0,0,0,717,111,1,0,0,
|
|
|
|
|
0,718,716,1,0,0,0,719,724,3,114,57,0,720,721,7,5,0,0,721,723,3,114,
|
|
|
|
|
57,0,722,720,1,0,0,0,723,726,1,0,0,0,724,722,1,0,0,0,724,725,1,0,
|
|
|
|
|
0,0,725,113,1,0,0,0,726,724,1,0,0,0,727,732,3,116,58,0,728,729,7,
|
|
|
|
|
6,0,0,729,731,3,116,58,0,730,728,1,0,0,0,731,734,1,0,0,0,732,730,
|
|
|
|
|
1,0,0,0,732,733,1,0,0,0,733,115,1,0,0,0,734,732,1,0,0,0,735,740,
|
|
|
|
|
3,72,36,0,736,737,7,7,0,0,737,739,3,72,36,0,738,736,1,0,0,0,739,
|
|
|
|
|
742,1,0,0,0,740,738,1,0,0,0,740,741,1,0,0,0,741,117,1,0,0,0,742,
|
|
|
|
|
740,1,0,0,0,743,755,3,128,64,0,744,755,3,130,65,0,745,755,3,134,
|
|
|
|
|
67,0,746,755,3,136,68,0,747,755,3,138,69,0,748,755,3,140,70,0,749,
|
|
|
|
|
755,3,126,63,0,750,755,3,120,60,0,751,755,3,122,61,0,752,755,3,124,
|
|
|
|
|
62,0,753,755,3,8,4,0,754,743,1,0,0,0,754,744,1,0,0,0,754,745,1,0,
|
|
|
|
|
0,0,754,746,1,0,0,0,754,747,1,0,0,0,754,748,1,0,0,0,754,749,1,0,
|
|
|
|
|
0,0,754,750,1,0,0,0,754,751,1,0,0,0,754,752,1,0,0,0,754,753,1,0,
|
|
|
|
|
0,0,755,119,1,0,0,0,756,758,5,79,0,0,757,756,1,0,0,0,757,758,1,0,
|
|
|
|
|
0,0,758,759,1,0,0,0,759,760,5,93,0,0,760,764,5,38,0,0,761,763,8,
|
|
|
|
|
8,0,0,762,761,1,0,0,0,763,766,1,0,0,0,764,762,1,0,0,0,764,765,1,
|
|
|
|
|
0,0,0,765,767,1,0,0,0,766,764,1,0,0,0,767,768,5,39,0,0,768,769,5,
|
|
|
|
|
2,0,0,769,121,1,0,0,0,770,771,5,80,0,0,771,775,5,1,0,0,772,774,8,
|
|
|
|
|
9,0,0,773,772,1,0,0,0,774,777,1,0,0,0,775,773,1,0,0,0,775,776,1,
|
|
|
|
|
0,0,0,776,778,1,0,0,0,777,775,1,0,0,0,778,779,5,20,0,0,779,123,1,
|
|
|
|
|
0,0,0,780,781,5,81,0,0,781,785,5,1,0,0,782,784,8,9,0,0,783,782,1,
|
|
|
|
|
0,0,0,784,787,1,0,0,0,785,783,1,0,0,0,785,786,1,0,0,0,786,788,1,
|
|
|
|
|
0,0,0,787,785,1,0,0,0,788,789,5,20,0,0,789,125,1,0,0,0,790,791,5,
|
|
|
|
|
93,0,0,791,795,5,38,0,0,792,794,3,8,4,0,793,792,1,0,0,0,794,797,
|
|
|
|
|
1,0,0,0,795,793,1,0,0,0,795,796,1,0,0,0,796,799,1,0,0,0,797,795,
|
|
|
|
|
1,0,0,0,798,800,3,132,66,0,799,798,1,0,0,0,799,800,1,0,0,0,800,802,
|
|
|
|
|
1,0,0,0,801,803,3,90,45,0,802,801,1,0,0,0,802,803,1,0,0,0,803,804,
|
|
|
|
|
1,0,0,0,804,805,5,39,0,0,805,127,1,0,0,0,806,807,5,93,0,0,807,808,
|
|
|
|
|
5,23,0,0,808,818,3,118,59,0,809,810,5,82,0,0,810,811,3,92,46,0,811,
|
|
|
|
|
812,5,23,0,0,812,813,3,118,59,0,813,818,1,0,0,0,814,815,5,83,0,0,
|
|
|
|
|
815,816,5,23,0,0,816,818,3,118,59,0,817,806,1,0,0,0,817,809,1,0,
|
|
|
|
|
0,0,817,814,1,0,0,0,818,129,1,0,0,0,819,823,5,1,0,0,820,822,3,8,
|
|
|
|
|
4,0,821,820,1,0,0,0,822,825,1,0,0,0,823,821,1,0,0,0,823,824,1,0,
|
|
|
|
|
0,0,824,827,1,0,0,0,825,823,1,0,0,0,826,828,3,132,66,0,827,826,1,
|
|
|
|
|
0,0,0,827,828,1,0,0,0,828,829,1,0,0,0,829,830,5,20,0,0,830,131,1,
|
|
|
|
|
0,0,0,831,833,3,118,59,0,832,831,1,0,0,0,833,834,1,0,0,0,834,832,
|
|
|
|
|
1,0,0,0,834,835,1,0,0,0,835,133,1,0,0,0,836,841,5,2,0,0,837,838,
|
|
|
|
|
3,90,45,0,838,839,5,2,0,0,839,841,1,0,0,0,840,836,1,0,0,0,840,837,
|
|
|
|
|
1,0,0,0,841,135,1,0,0,0,842,843,5,84,0,0,843,844,5,38,0,0,844,845,
|
|
|
|
|
3,90,45,0,845,846,5,39,0,0,846,847,6,68,-1,0,847,850,3,118,59,0,
|
|
|
|
|
848,849,5,85,0,0,849,851,3,118,59,0,850,848,1,0,0,0,850,851,1,0,
|
|
|
|
|
0,0,851,859,1,0,0,0,852,853,5,86,0,0,853,854,5,38,0,0,854,855,3,
|
|
|
|
|
90,45,0,855,856,5,39,0,0,856,857,3,118,59,0,857,859,1,0,0,0,858,
|
|
|
|
|
842,1,0,0,0,858,852,1,0,0,0,859,137,1,0,0,0,860,861,5,87,0,0,861,
|
|
|
|
|
862,5,38,0,0,862,863,3,90,45,0,863,864,5,39,0,0,864,865,3,118,59,
|
|
|
|
|
0,865,866,6,69,-1,0,866,877,1,0,0,0,867,868,5,88,0,0,868,869,3,118,
|
|
|
|
|
59,0,869,870,5,87,0,0,870,871,5,38,0,0,871,872,3,90,45,0,872,873,
|
|
|
|
|
5,39,0,0,873,874,5,2,0,0,874,875,6,69,-1,0,875,877,1,0,0,0,876,860,
|
|
|
|
|
1,0,0,0,876,867,1,0,0,0,877,139,1,0,0,0,878,879,5,89,0,0,879,880,
|
|
|
|
|
5,93,0,0,880,892,5,2,0,0,881,882,5,90,0,0,882,892,5,2,0,0,883,884,
|
|
|
|
|
5,91,0,0,884,892,5,2,0,0,885,886,5,92,0,0,886,892,5,2,0,0,887,888,
|
|
|
|
|
5,92,0,0,888,889,3,90,45,0,889,890,5,2,0,0,890,892,1,0,0,0,891,878,
|
|
|
|
|
1,0,0,0,891,881,1,0,0,0,891,883,1,0,0,0,891,885,1,0,0,0,891,887,
|
|
|
|
|
1,0,0,0,892,141,1,0,0,0,109,145,149,155,164,166,169,175,180,187,
|
|
|
|
|
189,193,201,206,213,219,242,247,253,262,269,277,279,286,292,296,
|
|
|
|
|
302,311,317,324,330,335,338,341,344,348,354,359,366,368,386,392,
|
|
|
|
|
395,400,405,408,413,418,424,426,430,435,439,446,451,454,458,461,
|
|
|
|
|
468,473,488,494,498,505,510,515,519,527,529,539,541,550,567,598,
|
|
|
|
|
600,608,619,628,634,638,643,647,654,664,677,684,692,700,708,716,
|
|
|
|
|
724,732,740,754,757,764,775,785,795,799,802,817,823,827,834,840,
|
|
|
|
|
850,858,876,891
|
|
|
|
|
]
|
2019-01-04 17:35:10 +08:00
|
|
|
|
|
|
|
|
class CParser ( Parser ):
|
|
|
|
|
|
|
|
|
|
grammarFileName = "C.g4"
|
|
|
|
|
|
|
|
|
|
atn = ATNDeserializer().deserialize(serializedATN())
|
|
|
|
|
|
|
|
|
|
decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ]
|
|
|
|
|
|
|
|
|
|
sharedContextCache = PredictionContextCache()
|
|
|
|
|
|
|
|
|
|
literalNames = [ "<INVALID>", "'{'", "';'", "'typedef'", "','", "'='",
|
|
|
|
|
"'extern'", "'static'", "'auto'", "'register'", "'STATIC'",
|
|
|
|
|
"'void'", "'char'", "'short'", "'int'", "'long'", "'float'",
|
|
|
|
|
"'double'", "'signed'", "'unsigned'", "'}'", "'struct'",
|
|
|
|
|
"'union'", "':'", "'enum'", "'const'", "'volatile'",
|
|
|
|
|
"'IN'", "'OUT'", "'OPTIONAL'", "'CONST'", "'UNALIGNED'",
|
|
|
|
|
"'VOLATILE'", "'GLOBAL_REMOVE_IF_UNREFERENCED'", "'EFIAPI'",
|
|
|
|
|
"'EFI_BOOTSERVICE'", "'EFI_RUNTIMESERVICE'", "'PACKED'",
|
|
|
|
|
"'('", "')'", "'['", "']'", "'*'", "'...'", "'+'",
|
|
|
|
|
"'-'", "'/'", "'%'", "'++'", "'--'", "'sizeof'", "'.'",
|
|
|
|
|
"'->'", "'&'", "'~'", "'!'", "'*='", "'/='", "'%='",
|
|
|
|
|
"'+='", "'-='", "'<<='", "'>>='", "'&='", "'^='", "'|='",
|
|
|
|
|
"'?'", "'||'", "'&&'", "'|'", "'^'", "'=='", "'!='",
|
|
|
|
|
"'<'", "'>'", "'<='", "'>='", "'<<'", "'>>'", "'__asm__'",
|
|
|
|
|
"'_asm'", "'__asm'", "'case'", "'default'", "'if'",
|
|
|
|
|
"'else'", "'switch'", "'while'", "'do'", "'goto'",
|
|
|
|
|
"'continue'", "'break'", "'return'" ]
|
|
|
|
|
|
|
|
|
|
symbolicNames = [ "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>",
|
|
|
|
|
"<INVALID>", "IDENTIFIER", "CHARACTER_LITERAL", "STRING_LITERAL",
|
|
|
|
|
"HEX_LITERAL", "DECIMAL_LITERAL", "OCTAL_LITERAL",
|
|
|
|
|
"FLOATING_POINT_LITERAL", "WS", "BS", "UnicodeVocabulary",
|
|
|
|
|
"COMMENT", "LINE_COMMENT", "LINE_COMMAND" ]
|
|
|
|
|
|
|
|
|
|
RULE_translation_unit = 0
|
|
|
|
|
RULE_external_declaration = 1
|
|
|
|
|
RULE_function_definition = 2
|
|
|
|
|
RULE_declaration_specifiers = 3
|
|
|
|
|
RULE_declaration = 4
|
|
|
|
|
RULE_init_declarator_list = 5
|
|
|
|
|
RULE_init_declarator = 6
|
|
|
|
|
RULE_storage_class_specifier = 7
|
|
|
|
|
RULE_type_specifier = 8
|
|
|
|
|
RULE_type_id = 9
|
|
|
|
|
RULE_struct_or_union_specifier = 10
|
|
|
|
|
RULE_struct_or_union = 11
|
|
|
|
|
RULE_struct_declaration_list = 12
|
|
|
|
|
RULE_struct_declaration = 13
|
|
|
|
|
RULE_specifier_qualifier_list = 14
|
|
|
|
|
RULE_struct_declarator_list = 15
|
|
|
|
|
RULE_struct_declarator = 16
|
|
|
|
|
RULE_enum_specifier = 17
|
|
|
|
|
RULE_enumerator_list = 18
|
|
|
|
|
RULE_enumerator = 19
|
|
|
|
|
RULE_type_qualifier = 20
|
|
|
|
|
RULE_declarator = 21
|
|
|
|
|
RULE_direct_declarator = 22
|
|
|
|
|
RULE_declarator_suffix = 23
|
|
|
|
|
RULE_pointer = 24
|
|
|
|
|
RULE_parameter_type_list = 25
|
|
|
|
|
RULE_parameter_list = 26
|
|
|
|
|
RULE_parameter_declaration = 27
|
|
|
|
|
RULE_identifier_list = 28
|
|
|
|
|
RULE_type_name = 29
|
|
|
|
|
RULE_abstract_declarator = 30
|
|
|
|
|
RULE_direct_abstract_declarator = 31
|
|
|
|
|
RULE_abstract_declarator_suffix = 32
|
|
|
|
|
RULE_initializer = 33
|
|
|
|
|
RULE_initializer_list = 34
|
|
|
|
|
RULE_argument_expression_list = 35
|
|
|
|
|
RULE_additive_expression = 36
|
|
|
|
|
RULE_multiplicative_expression = 37
|
|
|
|
|
RULE_cast_expression = 38
|
|
|
|
|
RULE_unary_expression = 39
|
|
|
|
|
RULE_postfix_expression = 40
|
|
|
|
|
RULE_macro_parameter_list = 41
|
|
|
|
|
RULE_unary_operator = 42
|
|
|
|
|
RULE_primary_expression = 43
|
|
|
|
|
RULE_constant = 44
|
|
|
|
|
RULE_expression = 45
|
|
|
|
|
RULE_constant_expression = 46
|
|
|
|
|
RULE_assignment_expression = 47
|
|
|
|
|
RULE_lvalue = 48
|
|
|
|
|
RULE_assignment_operator = 49
|
|
|
|
|
RULE_conditional_expression = 50
|
|
|
|
|
RULE_logical_or_expression = 51
|
|
|
|
|
RULE_logical_and_expression = 52
|
|
|
|
|
RULE_inclusive_or_expression = 53
|
|
|
|
|
RULE_exclusive_or_expression = 54
|
|
|
|
|
RULE_and_expression = 55
|
|
|
|
|
RULE_equality_expression = 56
|
|
|
|
|
RULE_relational_expression = 57
|
|
|
|
|
RULE_shift_expression = 58
|
|
|
|
|
RULE_statement = 59
|
|
|
|
|
RULE_asm2_statement = 60
|
|
|
|
|
RULE_asm1_statement = 61
|
|
|
|
|
RULE_asm_statement = 62
|
|
|
|
|
RULE_macro_statement = 63
|
|
|
|
|
RULE_labeled_statement = 64
|
|
|
|
|
RULE_compound_statement = 65
|
|
|
|
|
RULE_statement_list = 66
|
|
|
|
|
RULE_expression_statement = 67
|
|
|
|
|
RULE_selection_statement = 68
|
|
|
|
|
RULE_iteration_statement = 69
|
|
|
|
|
RULE_jump_statement = 70
|
|
|
|
|
|
|
|
|
|
ruleNames = [ "translation_unit", "external_declaration", "function_definition",
|
|
|
|
|
"declaration_specifiers", "declaration", "init_declarator_list",
|
|
|
|
|
"init_declarator", "storage_class_specifier", "type_specifier",
|
|
|
|
|
"type_id", "struct_or_union_specifier", "struct_or_union",
|
|
|
|
|
"struct_declaration_list", "struct_declaration", "specifier_qualifier_list",
|
|
|
|
|
"struct_declarator_list", "struct_declarator", "enum_specifier",
|
|
|
|
|
"enumerator_list", "enumerator", "type_qualifier", "declarator",
|
|
|
|
|
"direct_declarator", "declarator_suffix", "pointer",
|
|
|
|
|
"parameter_type_list", "parameter_list", "parameter_declaration",
|
|
|
|
|
"identifier_list", "type_name", "abstract_declarator",
|
|
|
|
|
"direct_abstract_declarator", "abstract_declarator_suffix",
|
|
|
|
|
"initializer", "initializer_list", "argument_expression_list",
|
|
|
|
|
"additive_expression", "multiplicative_expression", "cast_expression",
|
|
|
|
|
"unary_expression", "postfix_expression", "macro_parameter_list",
|
|
|
|
|
"unary_operator", "primary_expression", "constant", "expression",
|
|
|
|
|
"constant_expression", "assignment_expression", "lvalue",
|
|
|
|
|
"assignment_operator", "conditional_expression", "logical_or_expression",
|
|
|
|
|
"logical_and_expression", "inclusive_or_expression",
|
|
|
|
|
"exclusive_or_expression", "and_expression", "equality_expression",
|
|
|
|
|
"relational_expression", "shift_expression", "statement",
|
|
|
|
|
"asm2_statement", "asm1_statement", "asm_statement",
|
|
|
|
|
"macro_statement", "labeled_statement", "compound_statement",
|
|
|
|
|
"statement_list", "expression_statement", "selection_statement",
|
|
|
|
|
"iteration_statement", "jump_statement" ]
|
|
|
|
|
|
|
|
|
|
EOF = Token.EOF
|
|
|
|
|
T__0=1
|
|
|
|
|
T__1=2
|
|
|
|
|
T__2=3
|
|
|
|
|
T__3=4
|
|
|
|
|
T__4=5
|
|
|
|
|
T__5=6
|
|
|
|
|
T__6=7
|
|
|
|
|
T__7=8
|
|
|
|
|
T__8=9
|
|
|
|
|
T__9=10
|
|
|
|
|
T__10=11
|
|
|
|
|
T__11=12
|
|
|
|
|
T__12=13
|
|
|
|
|
T__13=14
|
|
|
|
|
T__14=15
|
|
|
|
|
T__15=16
|
|
|
|
|
T__16=17
|
|
|
|
|
T__17=18
|
|
|
|
|
T__18=19
|
|
|
|
|
T__19=20
|
|
|
|
|
T__20=21
|
|
|
|
|
T__21=22
|
|
|
|
|
T__22=23
|
|
|
|
|
T__23=24
|
|
|
|
|
T__24=25
|
|
|
|
|
T__25=26
|
|
|
|
|
T__26=27
|
|
|
|
|
T__27=28
|
|
|
|
|
T__28=29
|
|
|
|
|
T__29=30
|
|
|
|
|
T__30=31
|
|
|
|
|
T__31=32
|
|
|
|
|
T__32=33
|
|
|
|
|
T__33=34
|
|
|
|
|
T__34=35
|
|
|
|
|
T__35=36
|
|
|
|
|
T__36=37
|
|
|
|
|
T__37=38
|
|
|
|
|
T__38=39
|
|
|
|
|
T__39=40
|
|
|
|
|
T__40=41
|
|
|
|
|
T__41=42
|
|
|
|
|
T__42=43
|
|
|
|
|
T__43=44
|
|
|
|
|
T__44=45
|
|
|
|
|
T__45=46
|
|
|
|
|
T__46=47
|
|
|
|
|
T__47=48
|
|
|
|
|
T__48=49
|
|
|
|
|
T__49=50
|
|
|
|
|
T__50=51
|
|
|
|
|
T__51=52
|
|
|
|
|
T__52=53
|
|
|
|
|
T__53=54
|
|
|
|
|
T__54=55
|
|
|
|
|
T__55=56
|
|
|
|
|
T__56=57
|
|
|
|
|
T__57=58
|
|
|
|
|
T__58=59
|
|
|
|
|
T__59=60
|
|
|
|
|
T__60=61
|
|
|
|
|
T__61=62
|
|
|
|
|
T__62=63
|
|
|
|
|
T__63=64
|
|
|
|
|
T__64=65
|
|
|
|
|
T__65=66
|
|
|
|
|
T__66=67
|
|
|
|
|
T__67=68
|
|
|
|
|
T__68=69
|
|
|
|
|
T__69=70
|
|
|
|
|
T__70=71
|
|
|
|
|
T__71=72
|
|
|
|
|
T__72=73
|
|
|
|
|
T__73=74
|
|
|
|
|
T__74=75
|
|
|
|
|
T__75=76
|
|
|
|
|
T__76=77
|
|
|
|
|
T__77=78
|
|
|
|
|
T__78=79
|
|
|
|
|
T__79=80
|
|
|
|
|
T__80=81
|
|
|
|
|
T__81=82
|
|
|
|
|
T__82=83
|
|
|
|
|
T__83=84
|
|
|
|
|
T__84=85
|
|
|
|
|
T__85=86
|
|
|
|
|
T__86=87
|
|
|
|
|
T__87=88
|
|
|
|
|
T__88=89
|
|
|
|
|
T__89=90
|
|
|
|
|
T__90=91
|
|
|
|
|
T__91=92
|
|
|
|
|
IDENTIFIER=93
|
|
|
|
|
CHARACTER_LITERAL=94
|
|
|
|
|
STRING_LITERAL=95
|
|
|
|
|
HEX_LITERAL=96
|
|
|
|
|
DECIMAL_LITERAL=97
|
|
|
|
|
OCTAL_LITERAL=98
|
|
|
|
|
FLOATING_POINT_LITERAL=99
|
|
|
|
|
WS=100
|
|
|
|
|
BS=101
|
|
|
|
|
UnicodeVocabulary=102
|
|
|
|
|
COMMENT=103
|
|
|
|
|
LINE_COMMENT=104
|
|
|
|
|
LINE_COMMAND=105
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, input:TokenStream, output:TextIO = sys.stdout):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(input, output)
|
2026-03-19 15:23:48 -07:00
|
|
|
self.checkVersion("4.13.2")
|
2019-01-04 17:35:10 +08:00
|
|
|
self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache)
|
|
|
|
|
self._predicates = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-02-26 15:59:03 -05:00
|
|
|
def printTokenInfo(self, line, offset, tokenText):
|
2019-01-04 17:35:10 +08:00
|
|
|
print(str(line)+ ',' + str(offset) + ':' + str(tokenText))
|
|
|
|
|
|
2026-02-26 15:59:03 -05:00
|
|
|
def StorePredicateExpression(self, StartLine, StartOffset, EndLine, EndOffset, Text):
|
2019-01-04 17:35:10 +08:00
|
|
|
PredExp = CodeFragment.PredicateExpression(Text, (StartLine, StartOffset), (EndLine, EndOffset))
|
|
|
|
|
FileProfile.PredicateExpressionList.append(PredExp)
|
|
|
|
|
|
2026-02-26 15:59:03 -05:00
|
|
|
def StoreEnumerationDefinition(self, StartLine, StartOffset, EndLine, EndOffset, Text):
|
2019-01-04 17:35:10 +08:00
|
|
|
EnumDef = CodeFragment.EnumerationDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))
|
|
|
|
|
FileProfile.EnumerationDefinitionList.append(EnumDef)
|
|
|
|
|
|
2026-02-26 15:59:03 -05:00
|
|
|
def StoreStructUnionDefinition(self, StartLine, StartOffset, EndLine, EndOffset, Text):
|
2019-01-04 17:35:10 +08:00
|
|
|
SUDef = CodeFragment.StructUnionDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))
|
|
|
|
|
FileProfile.StructUnionDefinitionList.append(SUDef)
|
|
|
|
|
|
2026-02-26 15:59:03 -05:00
|
|
|
def StoreTypedefDefinition(self, StartLine, StartOffset, EndLine, EndOffset, FromText, ToText):
|
2019-01-04 17:35:10 +08:00
|
|
|
Tdef = CodeFragment.TypedefDefinition(FromText, ToText, (StartLine, StartOffset), (EndLine, EndOffset))
|
|
|
|
|
FileProfile.TypedefDefinitionList.append(Tdef)
|
|
|
|
|
|
2026-02-26 15:59:03 -05:00
|
|
|
def StoreFunctionDefinition(self, StartLine, StartOffset, EndLine, EndOffset, ModifierText, DeclText, LeftBraceLine, LeftBraceOffset, DeclLine, DeclOffset):
|
2019-01-04 17:35:10 +08:00
|
|
|
FuncDef = CodeFragment.FunctionDefinition(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset), (LeftBraceLine, LeftBraceOffset), (DeclLine, DeclOffset))
|
|
|
|
|
FileProfile.FunctionDefinitionList.append(FuncDef)
|
|
|
|
|
|
2026-02-26 15:59:03 -05:00
|
|
|
def StoreVariableDeclaration(self, StartLine, StartOffset, EndLine, EndOffset, ModifierText, DeclText):
|
2019-01-04 17:35:10 +08:00
|
|
|
VarDecl = CodeFragment.VariableDeclaration(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset))
|
|
|
|
|
FileProfile.VariableDeclarationList.append(VarDecl)
|
|
|
|
|
|
2026-02-26 15:59:03 -05:00
|
|
|
def StoreFunctionCalling(self, StartLine, StartOffset, EndLine, EndOffset, FuncName, ParamList):
|
2019-01-04 17:35:10 +08:00
|
|
|
FuncCall = CodeFragment.FunctionCalling(FuncName, ParamList, (StartLine, StartOffset), (EndLine, EndOffset))
|
|
|
|
|
FileProfile.FunctionCallingList.append(FuncCall)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Translation_unitContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def external_declaration(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.External_declarationContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.External_declarationContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_translation_unit
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterTranslation_unit" ):
|
|
|
|
|
listener.enterTranslation_unit(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitTranslation_unit" ):
|
|
|
|
|
listener.exitTranslation_unit(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def translation_unit(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Translation_unitContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 0, self.RULE_translation_unit)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 145
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while (((_la) & ~0x3f) == 0 and ((1 << _la) & 4947792887752) != 0) or _la==93:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 142
|
|
|
|
|
self.external_declaration()
|
|
|
|
|
self.state = 147
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class External_declarationContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def declarator(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.DeclaratorContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def declaration_specifiers(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Declaration_specifiersContext,0)
|
|
|
|
|
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def declaration(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.DeclarationContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.DeclarationContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def function_definition(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Function_definitionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def macro_statement(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Macro_statementContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_external_declaration
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterExternal_declaration" ):
|
|
|
|
|
listener.enterExternal_declaration(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitExternal_declaration" ):
|
|
|
|
|
listener.exitExternal_declaration(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def external_declaration(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.External_declarationContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 2, self.RULE_external_declaration)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.state = 166
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,4,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 149
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,1,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.state = 148
|
|
|
|
|
self.declaration_specifiers()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 151
|
|
|
|
|
self.declarator()
|
|
|
|
|
self.state = 155
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while (((_la) & ~0x3f) == 0 and ((1 << _la) & 274868469704) != 0) or _la==93:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 152
|
|
|
|
|
self.declaration()
|
|
|
|
|
self.state = 157
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
self.state = 158
|
|
|
|
|
self.match(CParser.T__0)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 160
|
|
|
|
|
self.function_definition()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 3:
|
|
|
|
|
self.enterOuterAlt(localctx, 3)
|
|
|
|
|
self.state = 161
|
|
|
|
|
self.declaration()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 4:
|
|
|
|
|
self.enterOuterAlt(localctx, 4)
|
|
|
|
|
self.state = 162
|
|
|
|
|
self.macro_statement()
|
|
|
|
|
self.state = 164
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==2:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 163
|
|
|
|
|
self.match(CParser.T__1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Function_definitionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
self.ModifierText = ''
|
|
|
|
|
self.DeclText = ''
|
|
|
|
|
self.LBLine = 0
|
|
|
|
|
self.LBOffset = 0
|
|
|
|
|
self.DeclLine = 0
|
|
|
|
|
self.DeclOffset = 0
|
|
|
|
|
self.d = None # Declaration_specifiersContext
|
|
|
|
|
self._declaration_specifiers = None # Declaration_specifiersContext
|
|
|
|
|
self._declarator = None # DeclaratorContext
|
|
|
|
|
self.a = None # Compound_statementContext
|
|
|
|
|
self.b = None # Compound_statementContext
|
|
|
|
|
|
|
|
|
|
def declarator(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.DeclaratorContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def compound_statement(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Compound_statementContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def declaration_specifiers(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Declaration_specifiersContext,0)
|
|
|
|
|
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def declaration(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.DeclarationContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.DeclarationContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_function_definition
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterFunction_definition" ):
|
|
|
|
|
listener.enterFunction_definition(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitFunction_definition" ):
|
|
|
|
|
listener.exitFunction_definition(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def function_definition(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Function_definitionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 4, self.RULE_function_definition)
|
|
|
|
|
|
|
|
|
|
ModifierText = '';
|
|
|
|
|
DeclText = '';
|
|
|
|
|
LBLine = 0;
|
|
|
|
|
LBOffset = 0;
|
|
|
|
|
DeclLine = 0;
|
|
|
|
|
DeclOffset = 0;
|
|
|
|
|
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 169
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,5,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.state = 168
|
|
|
|
|
localctx.d = localctx._declaration_specifiers = self.declaration_specifiers()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 171
|
|
|
|
|
localctx._declarator = self.declarator()
|
|
|
|
|
self.state = 180
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
token = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if token in [3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 93]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 173
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
while True:
|
|
|
|
|
self.state = 172
|
|
|
|
|
self.declaration()
|
|
|
|
|
self.state = 175
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & 274868469704) != 0) or _la==93):
|
2019-01-04 17:35:10 +08:00
|
|
|
break
|
|
|
|
|
|
|
|
|
|
self.state = 177
|
|
|
|
|
localctx.a = self.compound_statement()
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [1]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 179
|
|
|
|
|
localctx.b = self.compound_statement()
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if localctx.d != None:
|
2026-02-26 15:58:36 -05:00
|
|
|
ModifierText = (None if localctx._declaration_specifiers is None else self._input.getText(localctx._declaration_specifiers.start,localctx._declaration_specifiers.stop))
|
2019-01-04 17:35:10 +08:00
|
|
|
else:
|
|
|
|
|
ModifierText = ''
|
2026-02-26 15:58:36 -05:00
|
|
|
DeclText = (None if localctx._declarator is None else self._input.getText(localctx._declarator.start,localctx._declarator.stop))
|
2019-01-04 17:35:10 +08:00
|
|
|
DeclLine = (None if localctx._declarator is None else localctx._declarator.start).line
|
|
|
|
|
DeclOffset = (None if localctx._declarator is None else localctx._declarator.start).column
|
|
|
|
|
if localctx.a != None:
|
|
|
|
|
LBLine = (None if localctx.a is None else localctx.a.start).line
|
|
|
|
|
LBOffset = (None if localctx.a is None else localctx.a.start).column
|
|
|
|
|
else:
|
|
|
|
|
LBLine = (None if localctx.b is None else localctx.b.start).line
|
|
|
|
|
LBOffset = (None if localctx.b is None else localctx.b.start).column
|
|
|
|
|
|
|
|
|
|
self._ctx.stop = self._input.LT(-1)
|
|
|
|
|
|
|
|
|
|
self.StoreFunctionDefinition(localctx.start.line, localctx.start.column, localctx.stop.line, localctx.stop.column, ModifierText, DeclText, LBLine, LBOffset, DeclLine, DeclOffset)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Declaration_specifiersContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def storage_class_specifier(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Storage_class_specifierContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Storage_class_specifierContext,i)
|
|
|
|
|
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def type_specifier(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Type_specifierContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Type_specifierContext,i)
|
|
|
|
|
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def type_qualifier(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Type_qualifierContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Type_qualifierContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_declaration_specifiers
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterDeclaration_specifiers" ):
|
|
|
|
|
listener.enterDeclaration_specifiers(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitDeclaration_specifiers" ):
|
|
|
|
|
listener.exitDeclaration_specifiers(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def declaration_specifiers(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Declaration_specifiersContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 6, self.RULE_declaration_specifiers)
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 187
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = 1
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt == 1:
|
|
|
|
|
self.state = 187
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
token = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if token in [6, 7, 8, 9, 10]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 184
|
|
|
|
|
self.storage_class_specifier()
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 24, 93]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 185
|
|
|
|
|
self.type_specifier()
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 186
|
|
|
|
|
self.type_qualifier()
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
self.state = 189
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,9,self._ctx)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class DeclarationContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
self.a = None # Token
|
|
|
|
|
self.b = None # Declaration_specifiersContext
|
|
|
|
|
self.c = None # Init_declarator_listContext
|
|
|
|
|
self.d = None # Token
|
|
|
|
|
self.s = None # Declaration_specifiersContext
|
|
|
|
|
self.t = None # Init_declarator_listContext
|
|
|
|
|
self.e = None # Token
|
|
|
|
|
|
|
|
|
|
def init_declarator_list(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Init_declarator_listContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def declaration_specifiers(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Declaration_specifiersContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_declaration
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterDeclaration" ):
|
|
|
|
|
listener.enterDeclaration(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitDeclaration" ):
|
|
|
|
|
listener.exitDeclaration(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def declaration(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.DeclarationContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 8, self.RULE_declaration)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.state = 206
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
token = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if token in [3]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 191
|
|
|
|
|
localctx.a = self.match(CParser.T__2)
|
|
|
|
|
self.state = 193
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,10,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.state = 192
|
|
|
|
|
localctx.b = self.declaration_specifiers()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 195
|
|
|
|
|
localctx.c = self.init_declarator_list()
|
|
|
|
|
self.state = 196
|
|
|
|
|
localctx.d = self.match(CParser.T__1)
|
|
|
|
|
|
|
|
|
|
if localctx.b is not None:
|
2026-02-26 15:58:36 -05:00
|
|
|
self.StoreTypedefDefinition(localctx.a.line, localctx.a.column, (0 if localctx.d is None else localctx.d.line), localctx.d.column, (None if localctx.b is None else self._input.getText(localctx.b.start,localctx.b.stop)), (None if localctx.c is None else self._input.getText(localctx.c.start,localctx.c.stop)))
|
2019-01-04 17:35:10 +08:00
|
|
|
else:
|
2026-02-26 15:58:36 -05:00
|
|
|
self.StoreTypedefDefinition(localctx.a.line, localctx.a.column, (0 if localctx.d is None else localctx.d.line), localctx.d.column, '', (None if localctx.c is None else self._input.getText(localctx.c.start,localctx.c.stop)))
|
2019-01-04 17:35:10 +08:00
|
|
|
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 93]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 199
|
|
|
|
|
localctx.s = self.declaration_specifiers()
|
|
|
|
|
self.state = 201
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & 576460752303423767) != 0):
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 200
|
|
|
|
|
localctx.t = self.init_declarator_list()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 203
|
|
|
|
|
localctx.e = self.match(CParser.T__1)
|
|
|
|
|
|
|
|
|
|
if localctx.t is not None:
|
2026-02-26 15:58:36 -05:00
|
|
|
self.StoreVariableDeclaration((None if localctx.s is None else localctx.s.start).line, (None if localctx.s is None else localctx.s.start).column, (None if localctx.t is None else localctx.t.start).line, (None if localctx.t is None else localctx.t.start).column, (None if localctx.s is None else self._input.getText(localctx.s.start,localctx.s.stop)), (None if localctx.t is None else self._input.getText(localctx.t.start,localctx.t.stop)))
|
2019-01-04 17:35:10 +08:00
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Init_declarator_listContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def init_declarator(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Init_declaratorContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Init_declaratorContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_init_declarator_list
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterInit_declarator_list" ):
|
|
|
|
|
listener.enterInit_declarator_list(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitInit_declarator_list" ):
|
|
|
|
|
listener.exitInit_declarator_list(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def init_declarator_list(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Init_declarator_listContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 10, self.RULE_init_declarator_list)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 208
|
|
|
|
|
self.init_declarator()
|
|
|
|
|
self.state = 213
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==4:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 209
|
|
|
|
|
self.match(CParser.T__3)
|
|
|
|
|
self.state = 210
|
|
|
|
|
self.init_declarator()
|
|
|
|
|
self.state = 215
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Init_declaratorContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def declarator(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.DeclaratorContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def initializer(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.InitializerContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_init_declarator
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterInit_declarator" ):
|
|
|
|
|
listener.enterInit_declarator(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitInit_declarator" ):
|
|
|
|
|
listener.exitInit_declarator(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def init_declarator(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Init_declaratorContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 12, self.RULE_init_declarator)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 216
|
|
|
|
|
self.declarator()
|
|
|
|
|
self.state = 219
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==5:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 217
|
|
|
|
|
self.match(CParser.T__4)
|
|
|
|
|
self.state = 218
|
|
|
|
|
self.initializer()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Storage_class_specifierContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_storage_class_specifier
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterStorage_class_specifier" ):
|
|
|
|
|
listener.enterStorage_class_specifier(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitStorage_class_specifier" ):
|
|
|
|
|
listener.exitStorage_class_specifier(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def storage_class_specifier(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Storage_class_specifierContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 14, self.RULE_storage_class_specifier)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 221
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 1984) != 0)):
|
2019-01-04 17:35:10 +08:00
|
|
|
self._errHandler.recoverInline(self)
|
|
|
|
|
else:
|
|
|
|
|
self._errHandler.reportMatch(self)
|
|
|
|
|
self.consume()
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Type_specifierContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
self.s = None # Struct_or_union_specifierContext
|
|
|
|
|
self.e = None # Enum_specifierContext
|
|
|
|
|
|
|
|
|
|
def struct_or_union_specifier(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Struct_or_union_specifierContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def enum_specifier(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Enum_specifierContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def IDENTIFIER(self):
|
|
|
|
|
return self.getToken(CParser.IDENTIFIER, 0)
|
|
|
|
|
|
|
|
|
|
def declarator(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.DeclaratorContext,0)
|
|
|
|
|
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def type_qualifier(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Type_qualifierContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Type_qualifierContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def type_id(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Type_idContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_type_specifier
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterType_specifier" ):
|
|
|
|
|
listener.enterType_specifier(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitType_specifier" ):
|
|
|
|
|
listener.exitType_specifier(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def type_specifier(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Type_specifierContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 16, self.RULE_type_specifier)
|
|
|
|
|
try:
|
|
|
|
|
self.state = 247
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,16,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 223
|
|
|
|
|
self.match(CParser.T__10)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 224
|
|
|
|
|
self.match(CParser.T__11)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 3:
|
|
|
|
|
self.enterOuterAlt(localctx, 3)
|
|
|
|
|
self.state = 225
|
|
|
|
|
self.match(CParser.T__12)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 4:
|
|
|
|
|
self.enterOuterAlt(localctx, 4)
|
|
|
|
|
self.state = 226
|
|
|
|
|
self.match(CParser.T__13)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 5:
|
|
|
|
|
self.enterOuterAlt(localctx, 5)
|
|
|
|
|
self.state = 227
|
|
|
|
|
self.match(CParser.T__14)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 6:
|
|
|
|
|
self.enterOuterAlt(localctx, 6)
|
|
|
|
|
self.state = 228
|
|
|
|
|
self.match(CParser.T__15)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 7:
|
|
|
|
|
self.enterOuterAlt(localctx, 7)
|
|
|
|
|
self.state = 229
|
|
|
|
|
self.match(CParser.T__16)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 8:
|
|
|
|
|
self.enterOuterAlt(localctx, 8)
|
|
|
|
|
self.state = 230
|
|
|
|
|
self.match(CParser.T__17)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 9:
|
|
|
|
|
self.enterOuterAlt(localctx, 9)
|
|
|
|
|
self.state = 231
|
|
|
|
|
self.match(CParser.T__18)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 10:
|
|
|
|
|
self.enterOuterAlt(localctx, 10)
|
|
|
|
|
self.state = 232
|
|
|
|
|
localctx.s = self.struct_or_union_specifier()
|
|
|
|
|
|
|
|
|
|
if localctx.s.stop is not None:
|
2026-02-26 15:58:36 -05:00
|
|
|
self.StoreStructUnionDefinition((None if localctx.s is None else localctx.s.start).line, (None if localctx.s is None else localctx.s.start).column, (None if localctx.s is None else localctx.s.stop).line, (None if localctx.s is None else localctx.s.stop).column, (None if localctx.s is None else self._input.getText(localctx.s.start,localctx.s.stop)))
|
2019-01-04 17:35:10 +08:00
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 11:
|
|
|
|
|
self.enterOuterAlt(localctx, 11)
|
|
|
|
|
self.state = 235
|
|
|
|
|
localctx.e = self.enum_specifier()
|
|
|
|
|
|
|
|
|
|
if localctx.e.stop is not None:
|
2026-02-26 15:58:36 -05:00
|
|
|
self.StoreEnumerationDefinition((None if localctx.e is None else localctx.e.start).line, (None if localctx.e is None else localctx.e.start).column, (None if localctx.e is None else localctx.e.stop).line, (None if localctx.e is None else localctx.e.stop).column, (None if localctx.e is None else self._input.getText(localctx.e.start,localctx.e.stop)))
|
2019-01-04 17:35:10 +08:00
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 12:
|
|
|
|
|
self.enterOuterAlt(localctx, 12)
|
|
|
|
|
self.state = 238
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
self.state = 242
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,15,self._ctx)
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt==1:
|
|
|
|
|
self.state = 239
|
|
|
|
|
self.type_qualifier()
|
|
|
|
|
self.state = 244
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,15,self._ctx)
|
|
|
|
|
|
|
|
|
|
self.state = 245
|
|
|
|
|
self.declarator()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 13:
|
|
|
|
|
self.enterOuterAlt(localctx, 13)
|
|
|
|
|
self.state = 246
|
|
|
|
|
self.type_id()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Type_idContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def IDENTIFIER(self):
|
|
|
|
|
return self.getToken(CParser.IDENTIFIER, 0)
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_type_id
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterType_id" ):
|
|
|
|
|
listener.enterType_id(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitType_id" ):
|
|
|
|
|
listener.exitType_id(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def type_id(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Type_idContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 18, self.RULE_type_id)
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 249
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Struct_or_union_specifierContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def struct_or_union(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Struct_or_unionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def struct_declaration_list(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Struct_declaration_listContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def IDENTIFIER(self):
|
|
|
|
|
return self.getToken(CParser.IDENTIFIER, 0)
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_struct_or_union_specifier
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterStruct_or_union_specifier" ):
|
|
|
|
|
listener.enterStruct_or_union_specifier(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitStruct_or_union_specifier" ):
|
|
|
|
|
listener.exitStruct_or_union_specifier(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def struct_or_union_specifier(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Struct_or_union_specifierContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 20, self.RULE_struct_or_union_specifier)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.state = 262
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,18,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 251
|
|
|
|
|
self.struct_or_union()
|
|
|
|
|
self.state = 253
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==93:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 252
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 255
|
|
|
|
|
self.match(CParser.T__0)
|
|
|
|
|
self.state = 256
|
|
|
|
|
self.struct_declaration_list()
|
|
|
|
|
self.state = 257
|
|
|
|
|
self.match(CParser.T__19)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 259
|
|
|
|
|
self.struct_or_union()
|
|
|
|
|
self.state = 260
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Struct_or_unionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_struct_or_union
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterStruct_or_union" ):
|
|
|
|
|
listener.enterStruct_or_union(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitStruct_or_union" ):
|
|
|
|
|
listener.exitStruct_or_union(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def struct_or_union(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Struct_or_unionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 22, self.RULE_struct_or_union)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 264
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if not(_la==21 or _la==22):
|
2019-01-04 17:35:10 +08:00
|
|
|
self._errHandler.recoverInline(self)
|
|
|
|
|
else:
|
|
|
|
|
self._errHandler.reportMatch(self)
|
|
|
|
|
self.consume()
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Struct_declaration_listContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def struct_declaration(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Struct_declarationContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Struct_declarationContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_struct_declaration_list
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterStruct_declaration_list" ):
|
|
|
|
|
listener.enterStruct_declaration_list(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitStruct_declaration_list" ):
|
|
|
|
|
listener.exitStruct_declaration_list(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def struct_declaration_list(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Struct_declaration_listContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 24, self.RULE_struct_declaration_list)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 267
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
while True:
|
|
|
|
|
self.state = 266
|
|
|
|
|
self.struct_declaration()
|
|
|
|
|
self.state = 269
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & 274868467712) != 0) or _la==93):
|
2019-01-04 17:35:10 +08:00
|
|
|
break
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Struct_declarationContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def specifier_qualifier_list(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Specifier_qualifier_listContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def struct_declarator_list(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Struct_declarator_listContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_struct_declaration
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterStruct_declaration" ):
|
|
|
|
|
listener.enterStruct_declaration(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitStruct_declaration" ):
|
|
|
|
|
listener.exitStruct_declaration(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def struct_declaration(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Struct_declarationContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 26, self.RULE_struct_declaration)
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 271
|
|
|
|
|
self.specifier_qualifier_list()
|
|
|
|
|
self.state = 272
|
|
|
|
|
self.struct_declarator_list()
|
|
|
|
|
self.state = 273
|
|
|
|
|
self.match(CParser.T__1)
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Specifier_qualifier_listContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def type_qualifier(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Type_qualifierContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Type_qualifierContext,i)
|
|
|
|
|
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def type_specifier(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Type_specifierContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Type_specifierContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_specifier_qualifier_list
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterSpecifier_qualifier_list" ):
|
|
|
|
|
listener.enterSpecifier_qualifier_list(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitSpecifier_qualifier_list" ):
|
|
|
|
|
listener.exitSpecifier_qualifier_list(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def specifier_qualifier_list(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Specifier_qualifier_listContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 28, self.RULE_specifier_qualifier_list)
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 277
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = 1
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt == 1:
|
|
|
|
|
self.state = 277
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
token = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if token in [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 275
|
|
|
|
|
self.type_qualifier()
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 24, 93]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 276
|
|
|
|
|
self.type_specifier()
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
self.state = 279
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,21,self._ctx)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Struct_declarator_listContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def struct_declarator(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Struct_declaratorContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Struct_declaratorContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_struct_declarator_list
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterStruct_declarator_list" ):
|
|
|
|
|
listener.enterStruct_declarator_list(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitStruct_declarator_list" ):
|
|
|
|
|
listener.exitStruct_declarator_list(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def struct_declarator_list(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Struct_declarator_listContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 30, self.RULE_struct_declarator_list)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 281
|
|
|
|
|
self.struct_declarator()
|
|
|
|
|
self.state = 286
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==4:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 282
|
|
|
|
|
self.match(CParser.T__3)
|
|
|
|
|
self.state = 283
|
|
|
|
|
self.struct_declarator()
|
|
|
|
|
self.state = 288
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Struct_declaratorContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def declarator(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.DeclaratorContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def constant_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Constant_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_struct_declarator
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterStruct_declarator" ):
|
|
|
|
|
listener.enterStruct_declarator(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitStruct_declarator" ):
|
|
|
|
|
listener.exitStruct_declarator(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def struct_declarator(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Struct_declaratorContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 32, self.RULE_struct_declarator)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.state = 296
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
token = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if token in [34, 35, 36, 38, 42, 93]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 289
|
|
|
|
|
self.declarator()
|
|
|
|
|
self.state = 292
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==23:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 290
|
|
|
|
|
self.match(CParser.T__22)
|
|
|
|
|
self.state = 291
|
|
|
|
|
self.constant_expression()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [23]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 294
|
|
|
|
|
self.match(CParser.T__22)
|
|
|
|
|
self.state = 295
|
|
|
|
|
self.constant_expression()
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Enum_specifierContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def enumerator_list(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Enumerator_listContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def IDENTIFIER(self):
|
|
|
|
|
return self.getToken(CParser.IDENTIFIER, 0)
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_enum_specifier
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterEnum_specifier" ):
|
|
|
|
|
listener.enterEnum_specifier(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitEnum_specifier" ):
|
|
|
|
|
listener.exitEnum_specifier(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def enum_specifier(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Enum_specifierContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 34, self.RULE_enum_specifier)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.state = 317
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,27,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 298
|
|
|
|
|
self.match(CParser.T__23)
|
|
|
|
|
self.state = 299
|
|
|
|
|
self.match(CParser.T__0)
|
|
|
|
|
self.state = 300
|
|
|
|
|
self.enumerator_list()
|
|
|
|
|
self.state = 302
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==4:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 301
|
|
|
|
|
self.match(CParser.T__3)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 304
|
|
|
|
|
self.match(CParser.T__19)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 306
|
|
|
|
|
self.match(CParser.T__23)
|
|
|
|
|
self.state = 307
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
self.state = 308
|
|
|
|
|
self.match(CParser.T__0)
|
|
|
|
|
self.state = 309
|
|
|
|
|
self.enumerator_list()
|
|
|
|
|
self.state = 311
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==4:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 310
|
|
|
|
|
self.match(CParser.T__3)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 313
|
|
|
|
|
self.match(CParser.T__19)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 3:
|
|
|
|
|
self.enterOuterAlt(localctx, 3)
|
|
|
|
|
self.state = 315
|
|
|
|
|
self.match(CParser.T__23)
|
|
|
|
|
self.state = 316
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Enumerator_listContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enumerator(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.EnumeratorContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.EnumeratorContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_enumerator_list
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterEnumerator_list" ):
|
|
|
|
|
listener.enterEnumerator_list(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitEnumerator_list" ):
|
|
|
|
|
listener.exitEnumerator_list(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def enumerator_list(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Enumerator_listContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 36, self.RULE_enumerator_list)
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 319
|
|
|
|
|
self.enumerator()
|
|
|
|
|
self.state = 324
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,28,self._ctx)
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt==1:
|
|
|
|
|
self.state = 320
|
|
|
|
|
self.match(CParser.T__3)
|
|
|
|
|
self.state = 321
|
|
|
|
|
self.enumerator()
|
|
|
|
|
self.state = 326
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,28,self._ctx)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class EnumeratorContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def IDENTIFIER(self):
|
|
|
|
|
return self.getToken(CParser.IDENTIFIER, 0)
|
|
|
|
|
|
|
|
|
|
def constant_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Constant_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_enumerator
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterEnumerator" ):
|
|
|
|
|
listener.enterEnumerator(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitEnumerator" ):
|
|
|
|
|
listener.exitEnumerator(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def enumerator(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.EnumeratorContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 38, self.RULE_enumerator)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 327
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
self.state = 330
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==5:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 328
|
|
|
|
|
self.match(CParser.T__4)
|
|
|
|
|
self.state = 329
|
|
|
|
|
self.constant_expression()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Type_qualifierContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_type_qualifier
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterType_qualifier" ):
|
|
|
|
|
listener.enterType_qualifier(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitType_qualifier" ):
|
|
|
|
|
listener.exitType_qualifier(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def type_qualifier(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Type_qualifierContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 40, self.RULE_type_qualifier)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 332
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 274844352512) != 0)):
|
2019-01-04 17:35:10 +08:00
|
|
|
self._errHandler.recoverInline(self)
|
|
|
|
|
else:
|
|
|
|
|
self._errHandler.reportMatch(self)
|
|
|
|
|
self.consume()
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class DeclaratorContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def direct_declarator(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Direct_declaratorContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def pointer(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.PointerContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_declarator
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterDeclarator" ):
|
|
|
|
|
listener.enterDeclarator(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitDeclarator" ):
|
|
|
|
|
listener.exitDeclarator(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def declarator(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.DeclaratorContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 42, self.RULE_declarator)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.state = 348
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,34,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 335
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==42:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 334
|
|
|
|
|
self.pointer()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 338
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==34:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 337
|
|
|
|
|
self.match(CParser.T__33)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 341
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==35:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 340
|
|
|
|
|
self.match(CParser.T__34)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 344
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==36:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 343
|
|
|
|
|
self.match(CParser.T__35)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 346
|
|
|
|
|
self.direct_declarator()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 347
|
|
|
|
|
self.pointer()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Direct_declaratorContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def IDENTIFIER(self):
|
|
|
|
|
return self.getToken(CParser.IDENTIFIER, 0)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def declarator_suffix(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Declarator_suffixContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Declarator_suffixContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def declarator(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.DeclaratorContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_direct_declarator
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterDirect_declarator" ):
|
|
|
|
|
listener.enterDirect_declarator(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitDirect_declarator" ):
|
|
|
|
|
listener.exitDirect_declarator(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def direct_declarator(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Direct_declaratorContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 44, self.RULE_direct_declarator)
|
|
|
|
|
try:
|
|
|
|
|
self.state = 368
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
token = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if token in [93]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 350
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
self.state = 354
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,35,self._ctx)
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt==1:
|
|
|
|
|
self.state = 351
|
|
|
|
|
self.declarator_suffix()
|
|
|
|
|
self.state = 356
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,35,self._ctx)
|
|
|
|
|
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [38]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 357
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 359
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,36,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.state = 358
|
|
|
|
|
self.match(CParser.T__33)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 361
|
|
|
|
|
self.declarator()
|
|
|
|
|
self.state = 362
|
|
|
|
|
self.match(CParser.T__38)
|
|
|
|
|
self.state = 364
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = 1
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt == 1:
|
|
|
|
|
self.state = 363
|
|
|
|
|
self.declarator_suffix()
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
self.state = 366
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,37,self._ctx)
|
|
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Declarator_suffixContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def constant_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Constant_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def parameter_type_list(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Parameter_type_listContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def identifier_list(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Identifier_listContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_declarator_suffix
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterDeclarator_suffix" ):
|
|
|
|
|
listener.enterDeclarator_suffix(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitDeclarator_suffix" ):
|
|
|
|
|
listener.exitDeclarator_suffix(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def declarator_suffix(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Declarator_suffixContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 46, self.RULE_declarator_suffix)
|
|
|
|
|
try:
|
|
|
|
|
self.state = 386
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,39,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 370
|
|
|
|
|
self.match(CParser.T__39)
|
|
|
|
|
self.state = 371
|
|
|
|
|
self.constant_expression()
|
|
|
|
|
self.state = 372
|
|
|
|
|
self.match(CParser.T__40)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 374
|
|
|
|
|
self.match(CParser.T__39)
|
|
|
|
|
self.state = 375
|
|
|
|
|
self.match(CParser.T__40)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 3:
|
|
|
|
|
self.enterOuterAlt(localctx, 3)
|
|
|
|
|
self.state = 376
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 377
|
|
|
|
|
self.parameter_type_list()
|
|
|
|
|
self.state = 378
|
|
|
|
|
self.match(CParser.T__38)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 4:
|
|
|
|
|
self.enterOuterAlt(localctx, 4)
|
|
|
|
|
self.state = 380
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 381
|
|
|
|
|
self.identifier_list()
|
|
|
|
|
self.state = 382
|
|
|
|
|
self.match(CParser.T__38)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 5:
|
|
|
|
|
self.enterOuterAlt(localctx, 5)
|
|
|
|
|
self.state = 384
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 385
|
|
|
|
|
self.match(CParser.T__38)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class PointerContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def type_qualifier(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Type_qualifierContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Type_qualifierContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def pointer(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.PointerContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_pointer
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterPointer" ):
|
|
|
|
|
listener.enterPointer(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitPointer" ):
|
|
|
|
|
listener.exitPointer(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def pointer(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.PointerContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 48, self.RULE_pointer)
|
|
|
|
|
try:
|
|
|
|
|
self.state = 400
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,42,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 388
|
|
|
|
|
self.match(CParser.T__41)
|
|
|
|
|
self.state = 390
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = 1
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt == 1:
|
|
|
|
|
self.state = 389
|
|
|
|
|
self.type_qualifier()
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
self.state = 392
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,40,self._ctx)
|
|
|
|
|
|
|
|
|
|
self.state = 395
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,41,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.state = 394
|
|
|
|
|
self.pointer()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 397
|
|
|
|
|
self.match(CParser.T__41)
|
|
|
|
|
self.state = 398
|
|
|
|
|
self.pointer()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 3:
|
|
|
|
|
self.enterOuterAlt(localctx, 3)
|
|
|
|
|
self.state = 399
|
|
|
|
|
self.match(CParser.T__41)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Parameter_type_listContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def parameter_list(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Parameter_listContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_parameter_type_list
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterParameter_type_list" ):
|
|
|
|
|
listener.enterParameter_type_list(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitParameter_type_list" ):
|
|
|
|
|
listener.exitParameter_type_list(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def parameter_type_list(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Parameter_type_listContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 50, self.RULE_parameter_type_list)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 402
|
|
|
|
|
self.parameter_list()
|
|
|
|
|
self.state = 408
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==4:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 403
|
|
|
|
|
self.match(CParser.T__3)
|
|
|
|
|
self.state = 405
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==29:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 404
|
|
|
|
|
self.match(CParser.T__28)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 407
|
|
|
|
|
self.match(CParser.T__42)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Parameter_listContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def parameter_declaration(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Parameter_declarationContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Parameter_declarationContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_parameter_list
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterParameter_list" ):
|
|
|
|
|
listener.enterParameter_list(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitParameter_list" ):
|
|
|
|
|
listener.exitParameter_list(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def parameter_list(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Parameter_listContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 52, self.RULE_parameter_list)
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 410
|
|
|
|
|
self.parameter_declaration()
|
|
|
|
|
self.state = 418
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,46,self._ctx)
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt==1:
|
|
|
|
|
self.state = 411
|
|
|
|
|
self.match(CParser.T__3)
|
|
|
|
|
self.state = 413
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,45,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.state = 412
|
|
|
|
|
self.match(CParser.T__28)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 415
|
|
|
|
|
self.parameter_declaration()
|
|
|
|
|
self.state = 420
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,46,self._ctx)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Parameter_declarationContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def declaration_specifiers(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Declaration_specifiersContext,0)
|
|
|
|
|
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def declarator(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.DeclaratorContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.DeclaratorContext,i)
|
|
|
|
|
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def abstract_declarator(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Abstract_declaratorContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Abstract_declaratorContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def IDENTIFIER(self):
|
|
|
|
|
return self.getToken(CParser.IDENTIFIER, 0)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def pointer(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.PointerContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.PointerContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_parameter_declaration
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterParameter_declaration" ):
|
|
|
|
|
listener.enterParameter_declaration(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitParameter_declaration" ):
|
|
|
|
|
listener.exitParameter_declaration(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def parameter_declaration(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Parameter_declarationContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 54, self.RULE_parameter_declaration)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.state = 439
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,51,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 421
|
|
|
|
|
self.declaration_specifiers()
|
|
|
|
|
self.state = 426
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while ((((_la - 34)) & ~0x3f) == 0 and ((1 << (_la - 34)) & 576460752303423831) != 0):
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 424
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,47,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.state = 422
|
|
|
|
|
self.declarator()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.state = 423
|
|
|
|
|
self.abstract_declarator()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 428
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
self.state = 430
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==29:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 429
|
|
|
|
|
self.match(CParser.T__28)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 435
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==42:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 432
|
|
|
|
|
self.pointer()
|
|
|
|
|
self.state = 437
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
self.state = 438
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Identifier_listContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def IDENTIFIER(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTokens(CParser.IDENTIFIER)
|
|
|
|
|
else:
|
|
|
|
|
return self.getToken(CParser.IDENTIFIER, i)
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_identifier_list
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterIdentifier_list" ):
|
|
|
|
|
listener.enterIdentifier_list(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitIdentifier_list" ):
|
|
|
|
|
listener.exitIdentifier_list(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def identifier_list(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Identifier_listContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 56, self.RULE_identifier_list)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 441
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
self.state = 446
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==4:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 442
|
|
|
|
|
self.match(CParser.T__3)
|
|
|
|
|
self.state = 443
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
self.state = 448
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Type_nameContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def specifier_qualifier_list(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Specifier_qualifier_listContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def abstract_declarator(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Abstract_declaratorContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def type_id(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Type_idContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_type_name
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterType_name" ):
|
|
|
|
|
listener.enterType_name(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitType_name" ):
|
|
|
|
|
listener.exitType_name(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def type_name(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Type_nameContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 58, self.RULE_type_name)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.state = 454
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,54,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 449
|
|
|
|
|
self.specifier_qualifier_list()
|
|
|
|
|
self.state = 451
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if (((_la) & ~0x3f) == 0 and ((1 << _la) & 5772436045824) != 0):
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 450
|
|
|
|
|
self.abstract_declarator()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 453
|
|
|
|
|
self.type_id()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Abstract_declaratorContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def pointer(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.PointerContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def direct_abstract_declarator(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Direct_abstract_declaratorContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_abstract_declarator
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterAbstract_declarator" ):
|
|
|
|
|
listener.enterAbstract_declarator(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitAbstract_declarator" ):
|
|
|
|
|
listener.exitAbstract_declarator(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def abstract_declarator(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Abstract_declaratorContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 60, self.RULE_abstract_declarator)
|
|
|
|
|
try:
|
|
|
|
|
self.state = 461
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
token = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if token in [42]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 456
|
|
|
|
|
self.pointer()
|
|
|
|
|
self.state = 458
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,55,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.state = 457
|
|
|
|
|
self.direct_abstract_declarator()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [38, 40]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 460
|
|
|
|
|
self.direct_abstract_declarator()
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Direct_abstract_declaratorContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def abstract_declarator(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Abstract_declaratorContext,0)
|
|
|
|
|
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def abstract_declarator_suffix(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Abstract_declarator_suffixContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Abstract_declarator_suffixContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_direct_abstract_declarator
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterDirect_abstract_declarator" ):
|
|
|
|
|
listener.enterDirect_abstract_declarator(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitDirect_abstract_declarator" ):
|
|
|
|
|
listener.exitDirect_abstract_declarator(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def direct_abstract_declarator(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Direct_abstract_declaratorContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 62, self.RULE_direct_abstract_declarator)
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 468
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,57,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.state = 463
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 464
|
|
|
|
|
self.abstract_declarator()
|
|
|
|
|
self.state = 465
|
|
|
|
|
self.match(CParser.T__38)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.state = 467
|
|
|
|
|
self.abstract_declarator_suffix()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 473
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,58,self._ctx)
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt==1:
|
|
|
|
|
self.state = 470
|
|
|
|
|
self.abstract_declarator_suffix()
|
|
|
|
|
self.state = 475
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,58,self._ctx)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Abstract_declarator_suffixContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def constant_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Constant_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def parameter_type_list(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Parameter_type_listContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_abstract_declarator_suffix
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterAbstract_declarator_suffix" ):
|
|
|
|
|
listener.enterAbstract_declarator_suffix(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitAbstract_declarator_suffix" ):
|
|
|
|
|
listener.exitAbstract_declarator_suffix(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def abstract_declarator_suffix(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Abstract_declarator_suffixContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 64, self.RULE_abstract_declarator_suffix)
|
|
|
|
|
try:
|
|
|
|
|
self.state = 488
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,59,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 476
|
|
|
|
|
self.match(CParser.T__39)
|
|
|
|
|
self.state = 477
|
|
|
|
|
self.match(CParser.T__40)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 478
|
|
|
|
|
self.match(CParser.T__39)
|
|
|
|
|
self.state = 479
|
|
|
|
|
self.constant_expression()
|
|
|
|
|
self.state = 480
|
|
|
|
|
self.match(CParser.T__40)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 3:
|
|
|
|
|
self.enterOuterAlt(localctx, 3)
|
|
|
|
|
self.state = 482
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 483
|
|
|
|
|
self.match(CParser.T__38)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 4:
|
|
|
|
|
self.enterOuterAlt(localctx, 4)
|
|
|
|
|
self.state = 484
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 485
|
|
|
|
|
self.parameter_type_list()
|
|
|
|
|
self.state = 486
|
|
|
|
|
self.match(CParser.T__38)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class InitializerContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def assignment_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Assignment_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def initializer_list(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Initializer_listContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_initializer
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterInitializer" ):
|
|
|
|
|
listener.enterInitializer(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitInitializer" ):
|
|
|
|
|
listener.exitInitializer(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def initializer(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.InitializerContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 66, self.RULE_initializer)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.state = 498
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
token = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if token in [38, 42, 44, 45, 48, 49, 50, 53, 54, 55, 93, 94, 95, 96, 97, 98, 99]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 490
|
|
|
|
|
self.assignment_expression()
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [1]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 491
|
|
|
|
|
self.match(CParser.T__0)
|
|
|
|
|
self.state = 492
|
|
|
|
|
self.initializer_list()
|
|
|
|
|
self.state = 494
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==4:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 493
|
|
|
|
|
self.match(CParser.T__3)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 496
|
|
|
|
|
self.match(CParser.T__19)
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Initializer_listContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def initializer(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.InitializerContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.InitializerContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_initializer_list
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterInitializer_list" ):
|
|
|
|
|
listener.enterInitializer_list(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitInitializer_list" ):
|
|
|
|
|
listener.exitInitializer_list(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def initializer_list(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Initializer_listContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 68, self.RULE_initializer_list)
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 500
|
|
|
|
|
self.initializer()
|
|
|
|
|
self.state = 505
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,62,self._ctx)
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt==1:
|
|
|
|
|
self.state = 501
|
|
|
|
|
self.match(CParser.T__3)
|
|
|
|
|
self.state = 502
|
|
|
|
|
self.initializer()
|
|
|
|
|
self.state = 507
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,62,self._ctx)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Argument_expression_listContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def assignment_expression(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Assignment_expressionContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Assignment_expressionContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_argument_expression_list
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterArgument_expression_list" ):
|
|
|
|
|
listener.enterArgument_expression_list(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitArgument_expression_list" ):
|
|
|
|
|
listener.exitArgument_expression_list(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def argument_expression_list(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Argument_expression_listContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 70, self.RULE_argument_expression_list)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 508
|
|
|
|
|
self.assignment_expression()
|
|
|
|
|
self.state = 510
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==29:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 509
|
|
|
|
|
self.match(CParser.T__28)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 519
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==4:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 512
|
|
|
|
|
self.match(CParser.T__3)
|
|
|
|
|
self.state = 513
|
|
|
|
|
self.assignment_expression()
|
|
|
|
|
self.state = 515
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==29:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 514
|
|
|
|
|
self.match(CParser.T__28)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 521
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Additive_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def multiplicative_expression(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Multiplicative_expressionContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Multiplicative_expressionContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_additive_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterAdditive_expression" ):
|
|
|
|
|
listener.enterAdditive_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitAdditive_expression" ):
|
|
|
|
|
listener.exitAdditive_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def additive_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Additive_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 72, self.RULE_additive_expression)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 522
|
|
|
|
|
self.multiplicative_expression()
|
|
|
|
|
self.state = 529
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==44 or _la==45:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 527
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
token = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if token in [44]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 523
|
|
|
|
|
self.match(CParser.T__43)
|
|
|
|
|
self.state = 524
|
|
|
|
|
self.multiplicative_expression()
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [45]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 525
|
|
|
|
|
self.match(CParser.T__44)
|
|
|
|
|
self.state = 526
|
|
|
|
|
self.multiplicative_expression()
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
|
|
|
|
|
self.state = 531
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Multiplicative_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def cast_expression(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Cast_expressionContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Cast_expressionContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_multiplicative_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterMultiplicative_expression" ):
|
|
|
|
|
listener.enterMultiplicative_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitMultiplicative_expression" ):
|
|
|
|
|
listener.exitMultiplicative_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def multiplicative_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Multiplicative_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 74, self.RULE_multiplicative_expression)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 532
|
|
|
|
|
self.cast_expression()
|
|
|
|
|
self.state = 541
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while (((_la) & ~0x3f) == 0 and ((1 << _la) & 215504279044096) != 0):
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 539
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
token = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if token in [42]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 533
|
|
|
|
|
self.match(CParser.T__41)
|
|
|
|
|
self.state = 534
|
|
|
|
|
self.cast_expression()
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [46]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 535
|
|
|
|
|
self.match(CParser.T__45)
|
|
|
|
|
self.state = 536
|
|
|
|
|
self.cast_expression()
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [47]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 537
|
|
|
|
|
self.match(CParser.T__46)
|
|
|
|
|
self.state = 538
|
|
|
|
|
self.cast_expression()
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
|
|
|
|
|
self.state = 543
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Cast_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def type_name(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Type_nameContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def cast_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Cast_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def unary_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Unary_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_cast_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterCast_expression" ):
|
|
|
|
|
listener.enterCast_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitCast_expression" ):
|
|
|
|
|
listener.exitCast_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def cast_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Cast_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 76, self.RULE_cast_expression)
|
|
|
|
|
try:
|
|
|
|
|
self.state = 550
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,70,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 544
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 545
|
|
|
|
|
self.type_name()
|
|
|
|
|
self.state = 546
|
|
|
|
|
self.match(CParser.T__38)
|
|
|
|
|
self.state = 547
|
|
|
|
|
self.cast_expression()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 549
|
|
|
|
|
self.unary_expression()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Unary_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def postfix_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Postfix_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def unary_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Unary_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def unary_operator(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Unary_operatorContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def cast_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Cast_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def type_name(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Type_nameContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_unary_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterUnary_expression" ):
|
|
|
|
|
listener.enterUnary_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitUnary_expression" ):
|
|
|
|
|
listener.exitUnary_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def unary_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Unary_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 78, self.RULE_unary_expression)
|
|
|
|
|
try:
|
|
|
|
|
self.state = 567
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,71,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 552
|
|
|
|
|
self.postfix_expression()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 553
|
|
|
|
|
self.match(CParser.T__47)
|
|
|
|
|
self.state = 554
|
|
|
|
|
self.unary_expression()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 3:
|
|
|
|
|
self.enterOuterAlt(localctx, 3)
|
|
|
|
|
self.state = 555
|
|
|
|
|
self.match(CParser.T__48)
|
|
|
|
|
self.state = 556
|
|
|
|
|
self.unary_expression()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 4:
|
|
|
|
|
self.enterOuterAlt(localctx, 4)
|
|
|
|
|
self.state = 557
|
|
|
|
|
self.unary_operator()
|
|
|
|
|
self.state = 558
|
|
|
|
|
self.cast_expression()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 5:
|
|
|
|
|
self.enterOuterAlt(localctx, 5)
|
|
|
|
|
self.state = 560
|
|
|
|
|
self.match(CParser.T__49)
|
|
|
|
|
self.state = 561
|
|
|
|
|
self.unary_expression()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 6:
|
|
|
|
|
self.enterOuterAlt(localctx, 6)
|
|
|
|
|
self.state = 562
|
|
|
|
|
self.match(CParser.T__49)
|
|
|
|
|
self.state = 563
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 564
|
|
|
|
|
self.type_name()
|
|
|
|
|
self.state = 565
|
|
|
|
|
self.match(CParser.T__38)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Postfix_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
self.FuncCallText = ''
|
|
|
|
|
self.p = None # Primary_expressionContext
|
|
|
|
|
self.a = None # Token
|
|
|
|
|
self.c = None # Argument_expression_listContext
|
|
|
|
|
self.b = None # Token
|
|
|
|
|
self.x = None # Token
|
|
|
|
|
self.y = None # Token
|
|
|
|
|
self.z = None # Token
|
|
|
|
|
|
|
|
|
|
def primary_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Primary_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def expression(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.ExpressionContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.ExpressionContext,i)
|
|
|
|
|
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def macro_parameter_list(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Macro_parameter_listContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Macro_parameter_listContext,i)
|
|
|
|
|
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def argument_expression_list(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Argument_expression_listContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Argument_expression_listContext,i)
|
|
|
|
|
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def IDENTIFIER(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTokens(CParser.IDENTIFIER)
|
|
|
|
|
else:
|
|
|
|
|
return self.getToken(CParser.IDENTIFIER, i)
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_postfix_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterPostfix_expression" ):
|
|
|
|
|
listener.enterPostfix_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitPostfix_expression" ):
|
|
|
|
|
listener.exitPostfix_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def postfix_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Postfix_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 80, self.RULE_postfix_expression)
|
|
|
|
|
|
|
|
|
|
self.FuncCallText=''
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 569
|
|
|
|
|
localctx.p = self.primary_expression()
|
2026-02-26 15:58:36 -05:00
|
|
|
self.FuncCallText += (None if localctx.p is None else self._input.getText(localctx.p.start,localctx.p.stop))
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 600
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,73,self._ctx)
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt==1:
|
|
|
|
|
self.state = 598
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,72,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.state = 571
|
|
|
|
|
self.match(CParser.T__39)
|
|
|
|
|
self.state = 572
|
|
|
|
|
self.expression()
|
|
|
|
|
self.state = 573
|
|
|
|
|
self.match(CParser.T__40)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.state = 575
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 576
|
|
|
|
|
localctx.a = self.match(CParser.T__38)
|
|
|
|
|
self.StoreFunctionCalling((None if localctx.p is None else localctx.p.start).line, (None if localctx.p is None else localctx.p.start).column, (0 if localctx.a is None else localctx.a.line), localctx.a.column, self.FuncCallText, '')
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 3:
|
|
|
|
|
self.state = 578
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 579
|
|
|
|
|
localctx.c = self.argument_expression_list()
|
|
|
|
|
self.state = 580
|
|
|
|
|
localctx.b = self.match(CParser.T__38)
|
2026-02-26 15:58:36 -05:00
|
|
|
self.StoreFunctionCalling((None if localctx.p is None else localctx.p.start).line, (None if localctx.p is None else localctx.p.start).column, (0 if localctx.b is None else localctx.b.line), localctx.b.column, self.FuncCallText, (None if localctx.c is None else self._input.getText(localctx.c.start,localctx.c.stop)))
|
2019-01-04 17:35:10 +08:00
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 4:
|
|
|
|
|
self.state = 583
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 584
|
|
|
|
|
self.macro_parameter_list()
|
|
|
|
|
self.state = 585
|
|
|
|
|
self.match(CParser.T__38)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 5:
|
|
|
|
|
self.state = 587
|
|
|
|
|
self.match(CParser.T__50)
|
|
|
|
|
self.state = 588
|
|
|
|
|
localctx.x = self.match(CParser.IDENTIFIER)
|
|
|
|
|
self.FuncCallText += '.' + (None if localctx.x is None else localctx.x.text)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 6:
|
|
|
|
|
self.state = 590
|
|
|
|
|
self.match(CParser.T__41)
|
|
|
|
|
self.state = 591
|
|
|
|
|
localctx.y = self.match(CParser.IDENTIFIER)
|
|
|
|
|
self.FuncCallText = (None if localctx.y is None else localctx.y.text)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 7:
|
|
|
|
|
self.state = 593
|
|
|
|
|
self.match(CParser.T__51)
|
|
|
|
|
self.state = 594
|
|
|
|
|
localctx.z = self.match(CParser.IDENTIFIER)
|
|
|
|
|
self.FuncCallText += '->' + (None if localctx.z is None else localctx.z.text)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 8:
|
|
|
|
|
self.state = 596
|
|
|
|
|
self.match(CParser.T__47)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 9:
|
|
|
|
|
self.state = 597
|
|
|
|
|
self.match(CParser.T__48)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 602
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,73,self._ctx)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Macro_parameter_listContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def parameter_declaration(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Parameter_declarationContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Parameter_declarationContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_macro_parameter_list
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterMacro_parameter_list" ):
|
|
|
|
|
listener.enterMacro_parameter_list(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitMacro_parameter_list" ):
|
|
|
|
|
listener.exitMacro_parameter_list(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def macro_parameter_list(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Macro_parameter_listContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 82, self.RULE_macro_parameter_list)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 603
|
|
|
|
|
self.parameter_declaration()
|
|
|
|
|
self.state = 608
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==4:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 604
|
|
|
|
|
self.match(CParser.T__3)
|
|
|
|
|
self.state = 605
|
|
|
|
|
self.parameter_declaration()
|
|
|
|
|
self.state = 610
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Unary_operatorContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_unary_operator
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterUnary_operator" ):
|
|
|
|
|
listener.enterUnary_operator(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitUnary_operator" ):
|
|
|
|
|
listener.exitUnary_operator(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def unary_operator(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Unary_operatorContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 84, self.RULE_unary_operator)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 611
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 63107569387831296) != 0)):
|
2019-01-04 17:35:10 +08:00
|
|
|
self._errHandler.recoverInline(self)
|
|
|
|
|
else:
|
|
|
|
|
self._errHandler.reportMatch(self)
|
|
|
|
|
self.consume()
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Primary_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def IDENTIFIER(self):
|
|
|
|
|
return self.getToken(CParser.IDENTIFIER, 0)
|
|
|
|
|
|
|
|
|
|
def constant(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.ConstantContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.ExpressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_primary_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterPrimary_expression" ):
|
|
|
|
|
listener.enterPrimary_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitPrimary_expression" ):
|
|
|
|
|
listener.exitPrimary_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def primary_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Primary_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 86, self.RULE_primary_expression)
|
|
|
|
|
try:
|
|
|
|
|
self.state = 619
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,75,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 613
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 614
|
|
|
|
|
self.constant()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 3:
|
|
|
|
|
self.enterOuterAlt(localctx, 3)
|
|
|
|
|
self.state = 615
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 616
|
|
|
|
|
self.expression()
|
|
|
|
|
self.state = 617
|
|
|
|
|
self.match(CParser.T__38)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class ConstantContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def HEX_LITERAL(self):
|
|
|
|
|
return self.getToken(CParser.HEX_LITERAL, 0)
|
|
|
|
|
|
|
|
|
|
def OCTAL_LITERAL(self):
|
|
|
|
|
return self.getToken(CParser.OCTAL_LITERAL, 0)
|
|
|
|
|
|
|
|
|
|
def DECIMAL_LITERAL(self):
|
|
|
|
|
return self.getToken(CParser.DECIMAL_LITERAL, 0)
|
|
|
|
|
|
|
|
|
|
def CHARACTER_LITERAL(self):
|
|
|
|
|
return self.getToken(CParser.CHARACTER_LITERAL, 0)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def IDENTIFIER(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTokens(CParser.IDENTIFIER)
|
|
|
|
|
else:
|
|
|
|
|
return self.getToken(CParser.IDENTIFIER, i)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def STRING_LITERAL(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTokens(CParser.STRING_LITERAL)
|
|
|
|
|
else:
|
|
|
|
|
return self.getToken(CParser.STRING_LITERAL, i)
|
|
|
|
|
|
|
|
|
|
def FLOATING_POINT_LITERAL(self):
|
|
|
|
|
return self.getToken(CParser.FLOATING_POINT_LITERAL, 0)
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_constant
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterConstant" ):
|
|
|
|
|
listener.enterConstant(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitConstant" ):
|
|
|
|
|
listener.exitConstant(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def constant(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.ConstantContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 88, self.RULE_constant)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.state = 647
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
token = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if token in [96]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 621
|
|
|
|
|
self.match(CParser.HEX_LITERAL)
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [98]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 622
|
|
|
|
|
self.match(CParser.OCTAL_LITERAL)
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [97]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 3)
|
|
|
|
|
self.state = 623
|
|
|
|
|
self.match(CParser.DECIMAL_LITERAL)
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [94]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 4)
|
|
|
|
|
self.state = 624
|
|
|
|
|
self.match(CParser.CHARACTER_LITERAL)
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [93, 95]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 5)
|
|
|
|
|
self.state = 636
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = 1
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt == 1:
|
|
|
|
|
self.state = 628
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==93:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 625
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
self.state = 630
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
self.state = 632
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = 1
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt == 1:
|
|
|
|
|
self.state = 631
|
|
|
|
|
self.match(CParser.STRING_LITERAL)
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
self.state = 634
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,77,self._ctx)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
self.state = 638
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,78,self._ctx)
|
|
|
|
|
|
|
|
|
|
self.state = 643
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==93:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 640
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
self.state = 645
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [99]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 6)
|
|
|
|
|
self.state = 646
|
|
|
|
|
self.match(CParser.FLOATING_POINT_LITERAL)
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class ExpressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def assignment_expression(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Assignment_expressionContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Assignment_expressionContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterExpression" ):
|
|
|
|
|
listener.enterExpression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitExpression" ):
|
|
|
|
|
listener.exitExpression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.ExpressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 90, self.RULE_expression)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 649
|
|
|
|
|
self.assignment_expression()
|
|
|
|
|
self.state = 654
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==4:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 650
|
|
|
|
|
self.match(CParser.T__3)
|
|
|
|
|
self.state = 651
|
|
|
|
|
self.assignment_expression()
|
|
|
|
|
self.state = 656
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Constant_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def conditional_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Conditional_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_constant_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterConstant_expression" ):
|
|
|
|
|
listener.enterConstant_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitConstant_expression" ):
|
|
|
|
|
listener.exitConstant_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def constant_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Constant_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 92, self.RULE_constant_expression)
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 657
|
|
|
|
|
self.conditional_expression()
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Assignment_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def lvalue(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.LvalueContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def assignment_operator(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Assignment_operatorContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def assignment_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Assignment_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def conditional_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Conditional_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_assignment_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterAssignment_expression" ):
|
|
|
|
|
listener.enterAssignment_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitAssignment_expression" ):
|
|
|
|
|
listener.exitAssignment_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def assignment_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Assignment_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 94, self.RULE_assignment_expression)
|
|
|
|
|
try:
|
|
|
|
|
self.state = 664
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,82,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 659
|
|
|
|
|
self.lvalue()
|
|
|
|
|
self.state = 660
|
|
|
|
|
self.assignment_operator()
|
|
|
|
|
self.state = 661
|
|
|
|
|
self.assignment_expression()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 663
|
|
|
|
|
self.conditional_expression()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class LvalueContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def unary_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Unary_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_lvalue
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterLvalue" ):
|
|
|
|
|
listener.enterLvalue(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitLvalue" ):
|
|
|
|
|
listener.exitLvalue(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def lvalue(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.LvalueContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 96, self.RULE_lvalue)
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 666
|
|
|
|
|
self.unary_expression()
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Assignment_operatorContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_assignment_operator
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterAssignment_operator" ):
|
|
|
|
|
listener.enterAssignment_operator(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitAssignment_operator" ):
|
|
|
|
|
listener.exitAssignment_operator(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def assignment_operator(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Assignment_operatorContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 98, self.RULE_assignment_operator)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 668
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if not(((((_la - 5)) & ~0x3f) == 0 and ((1 << (_la - 5)) & 2303591209400008705) != 0)):
|
2019-01-04 17:35:10 +08:00
|
|
|
self._errHandler.recoverInline(self)
|
|
|
|
|
else:
|
|
|
|
|
self._errHandler.reportMatch(self)
|
|
|
|
|
self.consume()
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Conditional_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
self.e = None # Logical_or_expressionContext
|
|
|
|
|
|
|
|
|
|
def logical_or_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Logical_or_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.ExpressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def conditional_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Conditional_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_conditional_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterConditional_expression" ):
|
|
|
|
|
listener.enterConditional_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitConditional_expression" ):
|
|
|
|
|
listener.exitConditional_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def conditional_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Conditional_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 100, self.RULE_conditional_expression)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 670
|
|
|
|
|
localctx.e = self.logical_or_expression()
|
|
|
|
|
self.state = 677
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==66:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 671
|
|
|
|
|
self.match(CParser.T__65)
|
|
|
|
|
self.state = 672
|
|
|
|
|
self.expression()
|
|
|
|
|
self.state = 673
|
|
|
|
|
self.match(CParser.T__22)
|
|
|
|
|
self.state = 674
|
|
|
|
|
self.conditional_expression()
|
2026-02-26 15:58:36 -05:00
|
|
|
self.StorePredicateExpression((None if localctx.e is None else localctx.e.start).line, (None if localctx.e is None else localctx.e.start).column, (None if localctx.e is None else localctx.e.stop).line, (None if localctx.e is None else localctx.e.stop).column, (None if localctx.e is None else self._input.getText(localctx.e.start,localctx.e.stop)))
|
2019-01-04 17:35:10 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Logical_or_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def logical_and_expression(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Logical_and_expressionContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Logical_and_expressionContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_logical_or_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterLogical_or_expression" ):
|
|
|
|
|
listener.enterLogical_or_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitLogical_or_expression" ):
|
|
|
|
|
listener.exitLogical_or_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def logical_or_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Logical_or_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 102, self.RULE_logical_or_expression)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 679
|
|
|
|
|
self.logical_and_expression()
|
|
|
|
|
self.state = 684
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==67:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 680
|
|
|
|
|
self.match(CParser.T__66)
|
|
|
|
|
self.state = 681
|
|
|
|
|
self.logical_and_expression()
|
|
|
|
|
self.state = 686
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Logical_and_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def inclusive_or_expression(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Inclusive_or_expressionContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Inclusive_or_expressionContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_logical_and_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterLogical_and_expression" ):
|
|
|
|
|
listener.enterLogical_and_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitLogical_and_expression" ):
|
|
|
|
|
listener.exitLogical_and_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def logical_and_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Logical_and_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 104, self.RULE_logical_and_expression)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 687
|
|
|
|
|
self.inclusive_or_expression()
|
|
|
|
|
self.state = 692
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==68:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 688
|
|
|
|
|
self.match(CParser.T__67)
|
|
|
|
|
self.state = 689
|
|
|
|
|
self.inclusive_or_expression()
|
|
|
|
|
self.state = 694
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Inclusive_or_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exclusive_or_expression(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Exclusive_or_expressionContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Exclusive_or_expressionContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_inclusive_or_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterInclusive_or_expression" ):
|
|
|
|
|
listener.enterInclusive_or_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitInclusive_or_expression" ):
|
|
|
|
|
listener.exitInclusive_or_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def inclusive_or_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Inclusive_or_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 106, self.RULE_inclusive_or_expression)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 695
|
|
|
|
|
self.exclusive_or_expression()
|
|
|
|
|
self.state = 700
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==69:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 696
|
|
|
|
|
self.match(CParser.T__68)
|
|
|
|
|
self.state = 697
|
|
|
|
|
self.exclusive_or_expression()
|
|
|
|
|
self.state = 702
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Exclusive_or_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def and_expression(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.And_expressionContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.And_expressionContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_exclusive_or_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterExclusive_or_expression" ):
|
|
|
|
|
listener.enterExclusive_or_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitExclusive_or_expression" ):
|
|
|
|
|
listener.exitExclusive_or_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def exclusive_or_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Exclusive_or_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 108, self.RULE_exclusive_or_expression)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 703
|
|
|
|
|
self.and_expression()
|
|
|
|
|
self.state = 708
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==70:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 704
|
|
|
|
|
self.match(CParser.T__69)
|
|
|
|
|
self.state = 705
|
|
|
|
|
self.and_expression()
|
|
|
|
|
self.state = 710
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class And_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def equality_expression(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Equality_expressionContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Equality_expressionContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_and_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterAnd_expression" ):
|
|
|
|
|
listener.enterAnd_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitAnd_expression" ):
|
|
|
|
|
listener.exitAnd_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def and_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.And_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 110, self.RULE_and_expression)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 711
|
|
|
|
|
self.equality_expression()
|
|
|
|
|
self.state = 716
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==53:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 712
|
|
|
|
|
self.match(CParser.T__52)
|
|
|
|
|
self.state = 713
|
|
|
|
|
self.equality_expression()
|
|
|
|
|
self.state = 718
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Equality_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def relational_expression(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Relational_expressionContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Relational_expressionContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_equality_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterEquality_expression" ):
|
|
|
|
|
listener.enterEquality_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitEquality_expression" ):
|
|
|
|
|
listener.exitEquality_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def equality_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Equality_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 112, self.RULE_equality_expression)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 719
|
|
|
|
|
self.relational_expression()
|
|
|
|
|
self.state = 724
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==71 or _la==72:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 720
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if not(_la==71 or _la==72):
|
2019-01-04 17:35:10 +08:00
|
|
|
self._errHandler.recoverInline(self)
|
|
|
|
|
else:
|
|
|
|
|
self._errHandler.reportMatch(self)
|
|
|
|
|
self.consume()
|
|
|
|
|
self.state = 721
|
|
|
|
|
self.relational_expression()
|
|
|
|
|
self.state = 726
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Relational_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def shift_expression(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Shift_expressionContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Shift_expressionContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_relational_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterRelational_expression" ):
|
|
|
|
|
listener.enterRelational_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitRelational_expression" ):
|
|
|
|
|
listener.exitRelational_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def relational_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Relational_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 114, self.RULE_relational_expression)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 727
|
|
|
|
|
self.shift_expression()
|
|
|
|
|
self.state = 732
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 15) != 0):
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 728
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if not(((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 15) != 0)):
|
2019-01-04 17:35:10 +08:00
|
|
|
self._errHandler.recoverInline(self)
|
|
|
|
|
else:
|
|
|
|
|
self._errHandler.reportMatch(self)
|
|
|
|
|
self.consume()
|
|
|
|
|
self.state = 729
|
|
|
|
|
self.shift_expression()
|
|
|
|
|
self.state = 734
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Shift_expressionContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def additive_expression(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.Additive_expressionContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.Additive_expressionContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_shift_expression
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterShift_expression" ):
|
|
|
|
|
listener.enterShift_expression(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitShift_expression" ):
|
|
|
|
|
listener.exitShift_expression(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def shift_expression(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Shift_expressionContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 116, self.RULE_shift_expression)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 735
|
|
|
|
|
self.additive_expression()
|
|
|
|
|
self.state = 740
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while _la==77 or _la==78:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 736
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if not(_la==77 or _la==78):
|
2019-01-04 17:35:10 +08:00
|
|
|
self._errHandler.recoverInline(self)
|
|
|
|
|
else:
|
|
|
|
|
self._errHandler.reportMatch(self)
|
|
|
|
|
self.consume()
|
|
|
|
|
self.state = 737
|
|
|
|
|
self.additive_expression()
|
|
|
|
|
self.state = 742
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class StatementContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def labeled_statement(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Labeled_statementContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def compound_statement(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Compound_statementContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def expression_statement(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Expression_statementContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def selection_statement(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Selection_statementContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def iteration_statement(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Iteration_statementContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def jump_statement(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Jump_statementContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def macro_statement(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Macro_statementContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def asm2_statement(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Asm2_statementContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def asm1_statement(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Asm1_statementContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def asm_statement(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Asm_statementContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def declaration(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.DeclarationContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_statement
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterStatement" ):
|
|
|
|
|
listener.enterStatement(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitStatement" ):
|
|
|
|
|
listener.exitStatement(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def statement(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.StatementContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 118, self.RULE_statement)
|
|
|
|
|
try:
|
|
|
|
|
self.state = 754
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,92,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 743
|
|
|
|
|
self.labeled_statement()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 744
|
|
|
|
|
self.compound_statement()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 3:
|
|
|
|
|
self.enterOuterAlt(localctx, 3)
|
|
|
|
|
self.state = 745
|
|
|
|
|
self.expression_statement()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 4:
|
|
|
|
|
self.enterOuterAlt(localctx, 4)
|
|
|
|
|
self.state = 746
|
|
|
|
|
self.selection_statement()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 5:
|
|
|
|
|
self.enterOuterAlt(localctx, 5)
|
|
|
|
|
self.state = 747
|
|
|
|
|
self.iteration_statement()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 6:
|
|
|
|
|
self.enterOuterAlt(localctx, 6)
|
|
|
|
|
self.state = 748
|
|
|
|
|
self.jump_statement()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 7:
|
|
|
|
|
self.enterOuterAlt(localctx, 7)
|
|
|
|
|
self.state = 749
|
|
|
|
|
self.macro_statement()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 8:
|
|
|
|
|
self.enterOuterAlt(localctx, 8)
|
|
|
|
|
self.state = 750
|
|
|
|
|
self.asm2_statement()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 9:
|
|
|
|
|
self.enterOuterAlt(localctx, 9)
|
|
|
|
|
self.state = 751
|
|
|
|
|
self.asm1_statement()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 10:
|
|
|
|
|
self.enterOuterAlt(localctx, 10)
|
|
|
|
|
self.state = 752
|
|
|
|
|
self.asm_statement()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 11:
|
|
|
|
|
self.enterOuterAlt(localctx, 11)
|
|
|
|
|
self.state = 753
|
|
|
|
|
self.declaration()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Asm2_statementContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def IDENTIFIER(self):
|
|
|
|
|
return self.getToken(CParser.IDENTIFIER, 0)
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_asm2_statement
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterAsm2_statement" ):
|
|
|
|
|
listener.enterAsm2_statement(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitAsm2_statement" ):
|
|
|
|
|
listener.exitAsm2_statement(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def asm2_statement(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Asm2_statementContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 120, self.RULE_asm2_statement)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 757
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la==79:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 756
|
|
|
|
|
self.match(CParser.T__78)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 759
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
self.state = 760
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 764
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,94,self._ctx)
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt==1:
|
|
|
|
|
self.state = 761
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la <= 0 or _la==2:
|
2019-01-04 17:35:10 +08:00
|
|
|
self._errHandler.recoverInline(self)
|
|
|
|
|
else:
|
|
|
|
|
self._errHandler.reportMatch(self)
|
|
|
|
|
self.consume()
|
|
|
|
|
self.state = 766
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,94,self._ctx)
|
|
|
|
|
|
|
|
|
|
self.state = 767
|
|
|
|
|
self.match(CParser.T__38)
|
|
|
|
|
self.state = 768
|
|
|
|
|
self.match(CParser.T__1)
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Asm1_statementContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_asm1_statement
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterAsm1_statement" ):
|
|
|
|
|
listener.enterAsm1_statement(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitAsm1_statement" ):
|
|
|
|
|
listener.exitAsm1_statement(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def asm1_statement(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Asm1_statementContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 122, self.RULE_asm1_statement)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 770
|
|
|
|
|
self.match(CParser.T__79)
|
|
|
|
|
self.state = 771
|
|
|
|
|
self.match(CParser.T__0)
|
|
|
|
|
self.state = 775
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while (((_la) & ~0x3f) == 0 and ((1 << _la) & -1048578) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 4398046511103) != 0):
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 772
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la <= 0 or _la==20:
|
2019-01-04 17:35:10 +08:00
|
|
|
self._errHandler.recoverInline(self)
|
|
|
|
|
else:
|
|
|
|
|
self._errHandler.reportMatch(self)
|
|
|
|
|
self.consume()
|
|
|
|
|
self.state = 777
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
self.state = 778
|
|
|
|
|
self.match(CParser.T__19)
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Asm_statementContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_asm_statement
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterAsm_statement" ):
|
|
|
|
|
listener.enterAsm_statement(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitAsm_statement" ):
|
|
|
|
|
listener.exitAsm_statement(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def asm_statement(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Asm_statementContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 124, self.RULE_asm_statement)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 780
|
|
|
|
|
self.match(CParser.T__80)
|
|
|
|
|
self.state = 781
|
|
|
|
|
self.match(CParser.T__0)
|
|
|
|
|
self.state = 785
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
while (((_la) & ~0x3f) == 0 and ((1 << _la) & -1048578) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 4398046511103) != 0):
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 782
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if _la <= 0 or _la==20:
|
2019-01-04 17:35:10 +08:00
|
|
|
self._errHandler.recoverInline(self)
|
|
|
|
|
else:
|
|
|
|
|
self._errHandler.reportMatch(self)
|
|
|
|
|
self.consume()
|
|
|
|
|
self.state = 787
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
|
|
|
|
|
|
|
|
|
self.state = 788
|
|
|
|
|
self.match(CParser.T__19)
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Macro_statementContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def IDENTIFIER(self):
|
|
|
|
|
return self.getToken(CParser.IDENTIFIER, 0)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def declaration(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.DeclarationContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.DeclarationContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def statement_list(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Statement_listContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.ExpressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_macro_statement
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterMacro_statement" ):
|
|
|
|
|
listener.enterMacro_statement(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitMacro_statement" ):
|
|
|
|
|
listener.exitMacro_statement(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def macro_statement(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Macro_statementContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 126, self.RULE_macro_statement)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 790
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
self.state = 791
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 795
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,97,self._ctx)
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt==1:
|
|
|
|
|
self.state = 792
|
|
|
|
|
self.declaration()
|
|
|
|
|
self.state = 797
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,97,self._ctx)
|
|
|
|
|
|
|
|
|
|
self.state = 799
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,98,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.state = 798
|
|
|
|
|
self.statement_list()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 802
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if ((((_la - 38)) & ~0x3f) == 0 and ((1 << (_la - 38)) & 4575657221408660689) != 0):
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 801
|
|
|
|
|
self.expression()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 804
|
|
|
|
|
self.match(CParser.T__38)
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Labeled_statementContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def IDENTIFIER(self):
|
|
|
|
|
return self.getToken(CParser.IDENTIFIER, 0)
|
|
|
|
|
|
|
|
|
|
def statement(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.StatementContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def constant_expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Constant_expressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_labeled_statement
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterLabeled_statement" ):
|
|
|
|
|
listener.enterLabeled_statement(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitLabeled_statement" ):
|
|
|
|
|
listener.exitLabeled_statement(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def labeled_statement(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Labeled_statementContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 128, self.RULE_labeled_statement)
|
|
|
|
|
try:
|
|
|
|
|
self.state = 817
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
token = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if token in [93]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 806
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
self.state = 807
|
|
|
|
|
self.match(CParser.T__22)
|
|
|
|
|
self.state = 808
|
|
|
|
|
self.statement()
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [82]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 809
|
|
|
|
|
self.match(CParser.T__81)
|
|
|
|
|
self.state = 810
|
|
|
|
|
self.constant_expression()
|
|
|
|
|
self.state = 811
|
|
|
|
|
self.match(CParser.T__22)
|
|
|
|
|
self.state = 812
|
|
|
|
|
self.statement()
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [83]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 3)
|
|
|
|
|
self.state = 814
|
|
|
|
|
self.match(CParser.T__82)
|
|
|
|
|
self.state = 815
|
|
|
|
|
self.match(CParser.T__22)
|
|
|
|
|
self.state = 816
|
|
|
|
|
self.statement()
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Compound_statementContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def declaration(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.DeclarationContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.DeclarationContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def statement_list(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.Statement_listContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_compound_statement
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterCompound_statement" ):
|
|
|
|
|
listener.enterCompound_statement(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitCompound_statement" ):
|
|
|
|
|
listener.exitCompound_statement(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def compound_statement(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Compound_statementContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 130, self.RULE_compound_statement)
|
|
|
|
|
self._la = 0 # Token type
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 819
|
|
|
|
|
self.match(CParser.T__0)
|
|
|
|
|
self.state = 823
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,101,self._ctx)
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt==1:
|
|
|
|
|
self.state = 820
|
|
|
|
|
self.declaration()
|
|
|
|
|
self.state = 825
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,101,self._ctx)
|
|
|
|
|
|
|
|
|
|
self.state = 827
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_la = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if (((_la) & ~0x3f) == 0 and ((1 << _la) & 65078443971182542) != 0) or ((((_la - 79)) & ~0x3f) == 0 and ((1 << (_la - 79)) & 2097087) != 0):
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 826
|
|
|
|
|
self.statement_list()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.state = 829
|
|
|
|
|
self.match(CParser.T__19)
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Statement_listContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def statement(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.StatementContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.StatementContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_statement_list
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterStatement_list" ):
|
|
|
|
|
listener.enterStatement_list(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitStatement_list" ):
|
|
|
|
|
listener.exitStatement_list(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def statement_list(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Statement_listContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 132, self.RULE_statement_list)
|
|
|
|
|
try:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 832
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = 1
|
|
|
|
|
while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
|
|
|
|
|
if _alt == 1:
|
|
|
|
|
self.state = 831
|
|
|
|
|
self.statement()
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
self.state = 834
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
_alt = self._interp.adaptivePredict(self._input,103,self._ctx)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Expression_statementContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.ExpressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_expression_statement
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterExpression_statement" ):
|
|
|
|
|
listener.enterExpression_statement(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitExpression_statement" ):
|
|
|
|
|
listener.exitExpression_statement(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def expression_statement(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Expression_statementContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 134, self.RULE_expression_statement)
|
|
|
|
|
try:
|
|
|
|
|
self.state = 840
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
token = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if token in [2]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 836
|
|
|
|
|
self.match(CParser.T__1)
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [38, 42, 44, 45, 48, 49, 50, 53, 54, 55, 93, 94, 95, 96, 97, 98, 99]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 837
|
|
|
|
|
self.expression()
|
|
|
|
|
self.state = 838
|
|
|
|
|
self.match(CParser.T__1)
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Selection_statementContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
self.e = None # ExpressionContext
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def statement(self, i:int=None):
|
2019-01-04 17:35:10 +08:00
|
|
|
if i is None:
|
|
|
|
|
return self.getTypedRuleContexts(CParser.StatementContext)
|
|
|
|
|
else:
|
|
|
|
|
return self.getTypedRuleContext(CParser.StatementContext,i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.ExpressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_selection_statement
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterSelection_statement" ):
|
|
|
|
|
listener.enterSelection_statement(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitSelection_statement" ):
|
|
|
|
|
listener.exitSelection_statement(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def selection_statement(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Selection_statementContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 136, self.RULE_selection_statement)
|
|
|
|
|
try:
|
|
|
|
|
self.state = 858
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
token = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if token in [84]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 842
|
|
|
|
|
self.match(CParser.T__83)
|
|
|
|
|
self.state = 843
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 844
|
|
|
|
|
localctx.e = self.expression()
|
|
|
|
|
self.state = 845
|
|
|
|
|
self.match(CParser.T__38)
|
2026-02-26 15:58:36 -05:00
|
|
|
self.StorePredicateExpression((None if localctx.e is None else localctx.e.start).line, (None if localctx.e is None else localctx.e.start).column, (None if localctx.e is None else localctx.e.stop).line, (None if localctx.e is None else localctx.e.stop).column, (None if localctx.e is None else self._input.getText(localctx.e.start,localctx.e.stop)))
|
2019-01-04 17:35:10 +08:00
|
|
|
self.state = 847
|
|
|
|
|
self.statement()
|
|
|
|
|
self.state = 850
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,105,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.state = 848
|
|
|
|
|
self.match(CParser.T__84)
|
|
|
|
|
self.state = 849
|
|
|
|
|
self.statement()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [86]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 852
|
|
|
|
|
self.match(CParser.T__85)
|
|
|
|
|
self.state = 853
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 854
|
|
|
|
|
self.expression()
|
|
|
|
|
self.state = 855
|
|
|
|
|
self.match(CParser.T__38)
|
|
|
|
|
self.state = 856
|
|
|
|
|
self.statement()
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Iteration_statementContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
self.e = None # ExpressionContext
|
|
|
|
|
|
|
|
|
|
def statement(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.StatementContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.ExpressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_iteration_statement
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterIteration_statement" ):
|
|
|
|
|
listener.enterIteration_statement(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitIteration_statement" ):
|
|
|
|
|
listener.exitIteration_statement(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def iteration_statement(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Iteration_statementContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 138, self.RULE_iteration_statement)
|
|
|
|
|
try:
|
|
|
|
|
self.state = 876
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
token = self._input.LA(1)
|
2026-03-19 15:23:48 -07:00
|
|
|
if token in [87]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 860
|
|
|
|
|
self.match(CParser.T__86)
|
|
|
|
|
self.state = 861
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 862
|
|
|
|
|
localctx.e = self.expression()
|
|
|
|
|
self.state = 863
|
|
|
|
|
self.match(CParser.T__38)
|
|
|
|
|
self.state = 864
|
|
|
|
|
self.statement()
|
2026-02-26 15:58:36 -05:00
|
|
|
self.StorePredicateExpression((None if localctx.e is None else localctx.e.start).line, (None if localctx.e is None else localctx.e.start).column, (None if localctx.e is None else localctx.e.stop).line, (None if localctx.e is None else localctx.e.stop).column, (None if localctx.e is None else self._input.getText(localctx.e.start,localctx.e.stop)))
|
2019-01-04 17:35:10 +08:00
|
|
|
pass
|
2026-03-19 15:23:48 -07:00
|
|
|
elif token in [88]:
|
2019-01-04 17:35:10 +08:00
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 867
|
|
|
|
|
self.match(CParser.T__87)
|
|
|
|
|
self.state = 868
|
|
|
|
|
self.statement()
|
|
|
|
|
self.state = 869
|
|
|
|
|
self.match(CParser.T__86)
|
|
|
|
|
self.state = 870
|
|
|
|
|
self.match(CParser.T__37)
|
|
|
|
|
self.state = 871
|
|
|
|
|
localctx.e = self.expression()
|
|
|
|
|
self.state = 872
|
|
|
|
|
self.match(CParser.T__38)
|
|
|
|
|
self.state = 873
|
|
|
|
|
self.match(CParser.T__1)
|
2026-02-26 15:58:36 -05:00
|
|
|
self.StorePredicateExpression((None if localctx.e is None else localctx.e.start).line, (None if localctx.e is None else localctx.e.start).column, (None if localctx.e is None else localctx.e.stop).line, (None if localctx.e is None else localctx.e.stop).column, (None if localctx.e is None else self._input.getText(localctx.e.start,localctx.e.stop)))
|
2019-01-04 17:35:10 +08:00
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
raise NoViableAltException(self)
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
|
2019-01-04 17:35:10 +08:00
|
|
|
class Jump_statementContext(ParserRuleContext):
|
2026-03-19 15:23:48 -07:00
|
|
|
__slots__ = 'parser'
|
2019-01-04 17:35:10 +08:00
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
|
2019-01-04 17:35:10 +08:00
|
|
|
super().__init__(parent, invokingState)
|
|
|
|
|
self.parser = parser
|
|
|
|
|
|
|
|
|
|
def IDENTIFIER(self):
|
|
|
|
|
return self.getToken(CParser.IDENTIFIER, 0)
|
|
|
|
|
|
|
|
|
|
def expression(self):
|
|
|
|
|
return self.getTypedRuleContext(CParser.ExpressionContext,0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getRuleIndex(self):
|
|
|
|
|
return CParser.RULE_jump_statement
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def enterRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "enterJump_statement" ):
|
|
|
|
|
listener.enterJump_statement(self)
|
|
|
|
|
|
2026-02-26 15:58:36 -05:00
|
|
|
def exitRule(self, listener:ParseTreeListener):
|
2019-01-04 17:35:10 +08:00
|
|
|
if hasattr( listener, "exitJump_statement" ):
|
|
|
|
|
listener.exitJump_statement(self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def jump_statement(self):
|
|
|
|
|
|
|
|
|
|
localctx = CParser.Jump_statementContext(self, self._ctx, self.state)
|
|
|
|
|
self.enterRule(localctx, 140, self.RULE_jump_statement)
|
|
|
|
|
try:
|
|
|
|
|
self.state = 891
|
|
|
|
|
self._errHandler.sync(self)
|
|
|
|
|
la_ = self._interp.adaptivePredict(self._input,108,self._ctx)
|
|
|
|
|
if la_ == 1:
|
|
|
|
|
self.enterOuterAlt(localctx, 1)
|
|
|
|
|
self.state = 878
|
|
|
|
|
self.match(CParser.T__88)
|
|
|
|
|
self.state = 879
|
|
|
|
|
self.match(CParser.IDENTIFIER)
|
|
|
|
|
self.state = 880
|
|
|
|
|
self.match(CParser.T__1)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 2:
|
|
|
|
|
self.enterOuterAlt(localctx, 2)
|
|
|
|
|
self.state = 881
|
|
|
|
|
self.match(CParser.T__89)
|
|
|
|
|
self.state = 882
|
|
|
|
|
self.match(CParser.T__1)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 3:
|
|
|
|
|
self.enterOuterAlt(localctx, 3)
|
|
|
|
|
self.state = 883
|
|
|
|
|
self.match(CParser.T__90)
|
|
|
|
|
self.state = 884
|
|
|
|
|
self.match(CParser.T__1)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 4:
|
|
|
|
|
self.enterOuterAlt(localctx, 4)
|
|
|
|
|
self.state = 885
|
|
|
|
|
self.match(CParser.T__91)
|
|
|
|
|
self.state = 886
|
|
|
|
|
self.match(CParser.T__1)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
elif la_ == 5:
|
|
|
|
|
self.enterOuterAlt(localctx, 5)
|
|
|
|
|
self.state = 887
|
|
|
|
|
self.match(CParser.T__91)
|
|
|
|
|
self.state = 888
|
|
|
|
|
self.expression()
|
|
|
|
|
self.state = 889
|
|
|
|
|
self.match(CParser.T__1)
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except RecognitionException as re:
|
|
|
|
|
localctx.exception = re
|
|
|
|
|
self._errHandler.reportError(self, re)
|
|
|
|
|
self._errHandler.recover(self, re)
|
|
|
|
|
finally:
|
|
|
|
|
self.exitRule()
|
|
|
|
|
return localctx
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|