ldgen: rename key-value grammar class

This commit is contained in:
Renz Bagaporo
2021-03-05 17:48:47 +08:00
parent 10c5226095
commit 69906ed5f2
3 changed files with 12 additions and 11 deletions

View File

@@ -25,7 +25,6 @@ from pyparsing import (Combine, Forward, Group, Keyword, Literal, OneOrMore, Opt
originalTextFor, restOfLine) originalTextFor, restOfLine)
from sdkconfig import SDKConfig from sdkconfig import SDKConfig
KeyGrammar = namedtuple('KeyGrammar', 'grammar min max required')
class FragmentFile(): class FragmentFile():
@@ -192,6 +191,8 @@ class Fragment():
such as checking the validity of the fragment name and getting the entry values. such as checking the validity of the fragment name and getting the entry values.
""" """
KeyValue = namedtuple('KeyValue', 'grammar min max required')
IDENTIFIER = Word(alphas + '_', alphanums + '_') IDENTIFIER = Word(alphas + '_', alphanums + '_')
ENTITY = Word(alphanums + '.-_$') ENTITY = Word(alphanums + '.-_$')
@@ -213,7 +214,7 @@ class Sections(Fragment):
entries_grammar = Combine(GNU_LD_SYMBOLS + Optional('+')) entries_grammar = Combine(GNU_LD_SYMBOLS + Optional('+'))
grammars = { grammars = {
'entries': KeyGrammar(entries_grammar.setResultsName('section'), 1, None, True) 'entries': Fragment.KeyValue(entries_grammar.setResultsName('section'), 1, None, True)
} }
""" """
@@ -251,7 +252,7 @@ class Scheme(Fragment):
""" """
grammars = { grammars = {
'entries': KeyGrammar(Fragment.IDENTIFIER.setResultsName('sections') + Suppress('->') + 'entries': Fragment.KeyValue(Fragment.IDENTIFIER.setResultsName('sections') + Suppress('->') +
Fragment.IDENTIFIER.setResultsName('target'), 1, None, True) Fragment.IDENTIFIER.setResultsName('target'), 1, None, True)
} }
@@ -448,8 +449,8 @@ class Mapping(Fragment):
Optional(Suppress(';') + delimitedList(section_target_flags).setResultsName('sections_target_flags'))) Optional(Suppress(';') + delimitedList(section_target_flags).setResultsName('sections_target_flags')))
grammars = { grammars = {
'archive': KeyGrammar(Or([Fragment.ENTITY, Word(Entity.ALL)]).setResultsName('archive'), 1, 1, True), 'archive': Fragment.KeyValue(Or([Fragment.ENTITY, Word(Entity.ALL)]).setResultsName('archive'), 1, 1, True),
'entries': KeyGrammar(entry, 0, None, True) 'entries': Fragment.KeyValue(entry, 0, None, True)
} }
return grammars return grammars

View File

@@ -292,7 +292,7 @@ class RootNode(EntityNode):
def __init__(self): def __init__(self):
EntityNode.__init__(self, None, Entity.ALL) EntityNode.__init__(self, None, Entity.ALL)
self.child_t = ArchiveNode self.child_t = ArchiveNode
self.entity = Entity('*') self.entity = Entity(Entity.ALL)
class Generation: class Generation:

View File

@@ -23,20 +23,20 @@ from io import StringIO
from pyparsing import ParseException, ParseFatalException, Word, alphanums from pyparsing import ParseException, ParseFatalException, Word, alphanums
try: try:
from fragments import FRAGMENT_TYPES, Fragment, FragmentFile, KeyGrammar, Mapping from fragments import FRAGMENT_TYPES, Fragment, FragmentFile, Mapping
from sdkconfig import SDKConfig from sdkconfig import SDKConfig
except ImportError: except ImportError:
sys.path.append('../') sys.path.append('../')
from fragments import FRAGMENT_TYPES, Fragment, FragmentFile, KeyGrammar, Mapping from fragments import FRAGMENT_TYPES, Fragment, FragmentFile, Mapping
from sdkconfig import SDKConfig from sdkconfig import SDKConfig
class SampleFragment(Fragment): class SampleFragment(Fragment):
grammars = { grammars = {
'key_1': KeyGrammar(Word(alphanums + '_').setResultsName('value'), 0, None, True), 'key_1': Fragment.KeyValue(Word(alphanums + '_').setResultsName('value'), 0, None, True),
'key_2': KeyGrammar(Word(alphanums + '_').setResultsName('value'), 0, None, False), 'key_2': Fragment.KeyValue(Word(alphanums + '_').setResultsName('value'), 0, None, False),
'key_3': KeyGrammar(Word(alphanums + '_').setResultsName('value'), 3, 5, False) 'key_3': Fragment.KeyValue(Word(alphanums + '_').setResultsName('value'), 3, 5, False)
} }
def set_key_value(self, key, parse_results): def set_key_value(self, key, parse_results):