Начал реализацию dsl к билд коммандам

This commit is contained in:
Rustam Zaitov
2013-10-03 21:41:52 +04:00
parent 6e61455c90
commit b0abdcccdb
10 changed files with 126 additions and 16 deletions
+8
View File
@@ -0,0 +1,8 @@
import parser.StringValueParser as parser
class AttributeNameParser(parser.StringValueParser):
def __init__(self, attribute_name, model):
parser.StringValueParser.__init__(self, attribute_name, model)
def ProcessToken(self, token):
self._model.rel_path = ''
+10
View File
@@ -0,0 +1,10 @@
class StringValueParser:
def __init__(self, valid_string, model):
self._valid_string = valid_string
self._model = model
def IsTokenValid(self, token):
return token == self._valid_string
def ProcessToken(self, token):
pass
+1
View File
@@ -0,0 +1 @@
__author__ = 'rzaitov'
@@ -0,0 +1,66 @@
from parser.StringValueParser import *
from parser.AttributeNameParser import *
class CsprojParser:
def __init__(self, string_to_parse, value_token, config):
self._config = config
self._token_buffer = string_to_parse.split(' ')
self._token_buffer.append(value_token)
self._token_index = 0;
self._project = None
def Parse(self):
while self._token_index < len(self._token_buffer):
self.ProcessToken()
def ProcessToken(self):
token = self.getCurrentToken()
if self.isCsprojStatement(token):
self._token_index += 1
elif self.isAppToken(token):
self.processAppToken(token)
self._token_index += 1
elif self.isAttributeToken(token):
attribute_name = self.processAttributeNameToken(token)
self._token_index += 1
token = self.getCurrentToken()
attribute_value = self.processAttributeValueToken(token)
setattr(self.project, attribute_name, attribute_value)
def isCsprojStatement(self, token):
return token == 'csproj'
def isAppToken(self, token):
return token.startswith('app:')
def isAttributeToken(self, token):
return ':' not in token
def processAppToken(self, appToken):
appName = appToken[len('app:')]
self.project = Csproj(appName)
self._settings[appName] = self.project
def processAttributeNameToken(self, token):
attribute_name = token
return attribute_name
def processAttributeValueToken(self, token):
value = token
if token.startswith('@'):
key = token[1:]
value = self._config[key]
return value
def getCurrentToken(self):
token = self._token_buffer[self._token_index]
return token
class Csproj:
def __init__(self, appName):
self.appName = appName