Skip to content

Commit 179a72d

Browse files
authored
Merge pull request #156 from Typee-Language/#150-Modify-Correct-Parser-Code
#150-Modify-Correct Parser Code
2 parents 37a2662 + 63e2293 commit 179a72d

File tree

2 files changed

+18
-16
lines changed

2 files changed

+18
-16
lines changed

Diff for: Language-specifications/typee_specs_LL1-v9-1.grm

+6-6
Original file line numberDiff line numberDiff line change
@@ -459,8 +459,8 @@ SOFTWARE.
459459
<simple statement> ::= <assert statement> <simple statement end>
460460
| <del statement> <simple statement end>
461461
| <ensure statement> <simple statement end>
462-
| <file endianness> ##
463-
| <file flushing> ##
462+
| <file endianness>
463+
| <file flushing>
464464
| <flow statement> <simple statement end>
465465
| <import statement> <simple statement end>
466466
| <nop statement> <simple statement end>
@@ -541,7 +541,7 @@ SOFTWARE.
541541
| <type alias> <simple statement end>
542542
| <decl or def statement''>
543543
<decl or def statement''> ::= <TYPE'> <decl or def statement'''>
544-
| <enum definition> ##
544+
| <enum definition>
545545
| <identifier> <decl constructor or decl end>
546546
<decl or def statement'''> ::= <identifier> <decl or def statement''''>
547547
| <operator definition>
@@ -579,10 +579,10 @@ SOFTWARE.
579579
<ensure statement'> ::= ',' <expression>
580580
| EPS
581581

582-
<enum definition> ::= <enum type> <identifier> '{' <enum list> '}' ##
582+
<enum definition> ::= <enum type> <identifier> '{' <enum list> '}'
583583

584-
<enum item> ::= <identifier> <enum item'> ##
585-
<enum item'> ::= '=' <expression> ##
584+
<enum item> ::= <identifier> <enum item'>
585+
<enum item'> ::= '=' <expression>
586586
| EPS
587587

588588
<enum list> ::= <enum item> <enum list'>

Diff for: src/FrontEnd/Parser/fe_parser.py

+12-10
Original file line numberDiff line numberDiff line change
@@ -868,6 +868,7 @@ def _decl_or_def_statement1(self) -> bool: ###
868868
def _decl_or_def_statement2(self) -> bool: ###
869869
#=======================================================================
870870
# <decl or def statement''> ::= <TYPE'> <decl or def statement'''>
871+
# | <enum definition>
871872
# | <identifier> <decl constructor or decl end>
872873
#=======================================================================
873874
if self._TYPE1():
@@ -878,6 +879,8 @@ def _decl_or_def_statement2(self) -> bool: ###
878879
if not self._decl_constructor_or_decl_end():
879880
self._append_error( FESyntaxErrors.DECL_DEF_TYPE )
880881
return True
882+
elif self._enum_definition():
883+
return True
881884
else:
882885
self._append_error( FESyntaxErrors.VAR_TYPE )
883886
return False
@@ -1206,7 +1209,7 @@ def _enum_definition(self) -> bool:
12061209
if self._current.is_ENUM():
12071210
self._append_syntaxic_node()
12081211
self._next_token_node()
1209-
if self._current.is_IDENT:
1212+
if self._current.is_IDENT():
12101213
self._append_syntaxic_node()
12111214
self._next_token_node()
12121215
else:
@@ -1216,12 +1219,9 @@ def _enum_definition(self) -> bool:
12161219
self._next_token_node()
12171220
else:
12181221
self._append_error( FESyntaxErrors.ENUM_BRACKET_OP )
1219-
if self._enum_list():
1220-
self._append_syntaxic_node()
1221-
self._next_token_node()
1222-
else:
1222+
if not self._enum_list():
12231223
self._append_error( FESyntaxErrors.ENUM_LIST )
1224-
if self._current.is_BRACKETCL:
1224+
if self._current.is_BRACKETCL():
12251225
self._append_syntaxic_node()
12261226
self._next_token_node()
12271227
else:
@@ -1413,7 +1413,7 @@ def _file_endianness1(self) -> bool:
14131413
return True
14141414

14151415
#-------------------------------------------------------------------------
1416-
def file_flushing(self) -> bool:
1416+
def _file_flushing(self) -> bool:
14171417
#=======================================================================
14181418
# <file flushing> ::= '!' <dotted name> <file flushing'>
14191419
#=======================================================================
@@ -1428,7 +1428,7 @@ def file_flushing(self) -> bool:
14281428
return False
14291429

14301430
#-------------------------------------------------------------------------
1431-
def file_flushing1(self) -> bool:
1431+
def _file_flushing1(self) -> bool:
14321432
#=======================================================================
14331433
# <file flushing'> ::= '(' <expression> <file flushing''> ')'
14341434
# | '[' <expression> ']' '=' <expression>
@@ -2935,6 +2935,8 @@ def _simple_statement(self) -> bool: ###
29352935
# <simple statement> ::= <assert statement> <simple statement end>
29362936
# | <del statement> <simple statement end>
29372937
# | <ensure statement> <simple statement end>
2938+
# | <file endianness>
2939+
# | <file flushing>
29382940
# | <flow statement> <simple statement end>
29392941
# | <import statement> <simple statement end>
29402942
# | <nop statement> <simple statement end>
@@ -2945,6 +2947,8 @@ def _simple_statement(self) -> bool: ###
29452947
if self._assert_statement() or \
29462948
self._del_statement() or \
29472949
self._ensure_statement() or \
2950+
self._file_endianness() or \
2951+
self._file_flushing() or \
29482952
self._flow_statement() or \
29492953
self._import_statement() or \
29502954
self._nop_statement() or \
@@ -4139,5 +4143,3 @@ def _next_token_node(self) -> FEICodeTokenNode:
41394143
return self._current
41404144

41414145
#===== end of FrontEnd.Parser.parser =====#
4142-
4143-

0 commit comments

Comments
 (0)