Skip to content

GitLab

  • Menu
    • Projects Groups Snippets
      Help
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • L Language
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Container Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • bingo
  • Language
  • Merge requests
  • !10

Merged
Created 5 years ago by Виктор Волков@viktor.volkovMaintainer

implemented arguments of current table

  • Overview 0
  • Commits 1
  • Pipelines 1
  • Changes 15
  • You're only seeing other activity in the feed. To add a comment, switch to one of the following options.
Please register or sign in to reply
Compare
  • master (base)

and
  • latest version
    3dc14e53
    1 commit, 5 years ago

15 files
+ 223
- 167

    Preferences

    File browser
    Compare changes
s‎rc‎
Fron‎tend‎
AbstractS‎canner.php‎ +12 -0
Interm‎ediate‎
Code‎Impl‎
CodeNode‎Impl.php‎ +1 -23
CodeNodeTy‎peImpl.php‎ +0 -2
CodeFac‎tory.php‎ +2 -3
CodeNodeIn‎terface.php‎ +0 -2
Language/Co‎lumnFormula‎
Backend/In‎terpreters‎
ExpressionIn‎terpreter.php‎ +22 -1
Fron‎tend‎
Par‎sers‎
Expression‎Parser.php‎ +34 -20
Tok‎ens‎
ChipTo‎ken.php‎ +13 -3
SkipTo‎ken.php‎ +0 -35
SpecialSymb‎olToken.php‎ +3 -35
ColumnFormu‎laParser.php‎ +0 -10
ColumnFormul‎aScanner.php‎ +27 -0
ColumnFormu‎laToken.php‎ +0 -1
ColumnFormula‎TokenType.php‎ +0 -2
tests‎/Unit‎
ColumnFormulaInt‎erpreterTest.php‎ +109 -30
src/Frontend/AbstractScanner.php
+ 12
- 0
  • View file @ 3dc14e53

  • Edit in single-file editor

  • Edit in Web IDE


Show all unchanged lines Show 20 lines
{
return $this->source->peekChar();
}
/**
* Return the next chars from source after without moving forward
*
* @param int $len
*
* @return string
*/
public function peekRange(int $len): string
{
return $this->source->peekRange($len);
}
}
src/Intermediate/CodeImpl/CodeNodeImpl.php
+ 1
- 23
  • View file @ 3dc14e53

  • Edit in single-file editor

  • Edit in Web IDE


Show all unchanged lines Show 20 lines
private $type;
/**
* Is skipped node
*
* @var bool
*/
private $is_skipped;
/**
* Code node parent node
*
* @var CodeNodeInterface
Show 20 lines Show all unchanged lines Show 20 lines
*
* @param string $type
*/
public function __construct(string $type, bool $is_skipped = false)
public function __construct(string $type)
{
$this->type = $type;
$this->is_skipped = $is_skipped;
}
/**
Show 20 lines Show all unchanged lines Show 20 lines
}
/**
* Check if node is skipped
*
* @return bool
*/
public function isSkipped(): bool
{
return $this->is_skipped;
}
/**
* Get node parent node
*
* @return CodeNodeInterface
Show 20 lines Show all unchanged lines Show 20 lines
*/
public function addChild(CodeNodeInterface $node = null)
{
if (is_null($node) || $node->isSkipped()) {
return null;
}
if (!is_null($node)) {
$this->children[] = $node;
$node->setParent($this);
Show 20 lines Show all unchanged lines
src/Intermediate/CodeImpl/CodeNodeTypeImpl.php
+ 0
- 2
  • View file @ 3dc14e53

  • Edit in single-file editor

  • Edit in Web IDE


Show all unchanged lines Show 20 lines
{
// root code node for all languages
const DSL = "dsl";
// skip node for all languages
const SKIP = "skip";
// general functions
const SUM = "sum";
Show 20 lines Show all unchanged lines
src/Intermediate/CodeFactory.php
+ 2
- 3
  • View file @ 3dc14e53

  • Edit in single-file editor

  • Edit in Web IDE


Show all unchanged lines Show 20 lines
* Create and return a node implementation
*
* @param string $type
* @param string $is_skipped
*/
public static function createCodeNode($type, bool $is_skipped = false): CodeNodeImpl
public static function createCodeNode($type): CodeNodeImpl
{
return new CodeNodeImpl($type, $is_skipped);
return new CodeNodeImpl($type);
}
}
src/Intermediate/CodeNodeInterface.php
+ 0
- 2
  • View file @ 3dc14e53

  • Edit in single-file editor

  • Edit in Web IDE


Show all unchanged lines Show 20 lines
{
public function getType(): string;
public function isSkipped(): bool;
public function setParent(CodeNodeInterface $node);
public function getParent(): CodeNodeInterface;
Show 20 lines Show all unchanged lines
src/Language/ColumnFormula/Backend/Interpreters/ExpressionInterpreter.php
+ 22
- 1
  • View file @ 3dc14e53

  • Edit in single-file editor

  • Edit in Web IDE


Show all unchanged lines Show 20 lines
use Language\Intermediate\CodeNodeInterface;
use Language\Intermediate\CodeImpl\CodeKeyImpl;
use Language\Intermediate\CodeImpl\CodeNodeTypeImpl;
use Language\Intermediate\ColumnFormula\Frontend\ColumnFormulaTokenType;
use Language\Language\ColumnFormula\Frontend\ColumnFormulaTokenType;
use Language\Language\ColumnFormula\Backend\ColumnFormulaInterpreter;
use Language\Message\MessageType;
use Language\Message\Message;
Show 20 lines Show all unchanged lines Show 20 lines
$children = $node->getChildren();
$node1 = $children[0];
$node2 = $children[1];
self::$sql_select_statement .= '(';
$this->execute($node1);
if ($nodeType == CodeNodeTypeImpl::ADD) {
self::$sql_select_statement .= '+';
} elseif ($nodeType == CodeNodeTypeImpl::SUBTRACT) {
self::$sql_select_statement .= '-';
} elseif ($nodeType == CodeNodeTypeImpl::MULTIPLY) {
self::$sql_select_statement .= '*';
} elseif ($nodeType == CodeNodeTypeImpl::DIVIDE) {
self::$sql_select_statement .= '/';
}
$this->execute($node2);
self::$sql_select_statement .= ')';
} elseif ($nodeType == CodeNodeTypeImpl::NUMBER) {
self::$sql_select_statement .= $node->getAttribute(CodeKeyImpl::VALUE);
} elseif ($nodeType == ColumnFormulaTokenType::CHIP) {
$value_string = $node->getAttribute(CodeKeyImpl::VALUE);
$values = explode(" ", $value_string);
$valuesMap = [];
if (!empty($values)) {
foreach ($values as $item) {
$pair = explode("=", $item);
$valuesMap[$pair[0]] = intval(str_replace('"', '', $pair[1]));
}
}
if (!array_key_exists("target_object_id", $valuesMap)) {
self::$sql_select_statement .= "o.attr_{$valuesMap['field_id']}_";
}
}
}
}
src/Language/ColumnFormula/Frontend/Parsers/ExpressionParser.php
+ 34
- 20
  • View file @ 3dc14e53

  • Edit in single-file editor

  • Edit in Web IDE


Show all unchanged lines Show 20 lines
private function parseExpression(Token $token = null)
{
$rootNode = $this->parseSimpleExpression($token);
$token = $this->currentToken();
return $rootNode;
}
private function parseSimpleExpression(Token $token = null)
{
$rootNode = $this->parseTerm($token);
$this->skipNodes();
$token = $this->currentToken();
$tokenText = $token->getText();
while (ColumnFormulaTokenType::isAdditive($tokenText)) {
if ($tokenText == ColumnFormulaTokenType::ADD) {
$tokenType = $token->getType();
while (ColumnFormulaTokenType::isAdditive($tokenType)) {
if ($tokenType == ColumnFormulaTokenType::ADD) {
$nodeType = CodeNodeTypeImpl::ADD;
} elseif ($tokenText == ColumnFormulaTokenType::SUBTRACT) {
} elseif ($tokenType == ColumnFormulaTokenType::SUBTRACT) {
$nodeType = CodeNodeTypeImpl::SUBTRACT;
}
$opNode = CodeFactory::createCodeNode($nodeType);
Show 20 lines Show all unchanged lines Show 20 lines
$opNode->addChild($this->parseTerm($token));
$rootNode = $opNode;
$token = $this->currentToken();
$tokenText = $token->getText();
$tokenType = $token->getType();
}
return $rootNode;
}
private function parseTerm(Token $token = null)
{
$node = $this->parseFactor($token);
if (!is_null($node) && $node->isSkipped()) {
$this->skipNodes();
$rootNode = $this->parseFactor($token);
$token = $this->currentToken();
$tokenType = $token->getType();
while (ColumnFormulaTokenType::isMultiplicative($tokenType)) {
if ($tokenType == ColumnFormulaTokenType::MULTIPLY) {
$nodeType = CodeNodeTypeImpl::MULTIPLY;
} elseif ($tokenType == ColumnFormulaTokenType::DIVIDE) {
$nodeType = CodeNodeTypeImpl::DIVIDE;
}
$opNode = CodeFactory::createCodeNode($nodeType);
$opNode->addChild($rootNode);
$token = $this->nextToken();
$opNode->addChild($this->parseTerm($token));
$rootNode = $opNode;
$token = $this->currentToken();
$node = $this->parseFactor($token);
}
$tokenText = $token->getText();
while (ColumnFormulaTokenType::isMultiplicative($tokenText)) {
//
$tokenType = $token->getType();
}
return $node;
return $rootNode;
}
private function parseFactor(Token $token = null)
{
$tokenType = $token->getType();
switch ($tokenType) {
case ColumnFormulaTokenType::SKIP:
$rootNode = CodeFactory::createCodeNode(CodeNodeTypeImpl::SKIP, true);
$this->nextToken();
return $rootNode;
case ColumnFormulaTokenType::NUMBER:
$rootNode = CodeFactory::createCodeNode(CodeNodeTypeImpl::NUMBER);
$rootNode->setAttribute(CodeKeyImpl::VALUE, $token->getValue());
$this->nextToken();
return $rootNode;
case ColumnFormulaTokenType::CHIP:
$rootNode = CodeFactory::createCodeNode(ColumnFormulaTokenType::CHIP);
$rootNode->setAttribute(CodeKeyImpl::VALUE, $token->getValue());
$this->nextToken();
return $rootNode;
case ColumnFormulaTokenType::LEFT_PAREN:
$token = $this->nextToken();
$rootNode = $this->parseExpression($token);
$token = $this->currentToken();
if ($token->getType() == ColumnFormulaTokenType::RIGHT_PAREN) {
$token = $this->nextToken();
}
return $rootNode;
default:
return null;
}
Show 20 lines Show all unchanged lines
src/Language/ColumnFormula/Frontend/Tokens/ChipToken.php
+ 13
- 3
  • View file @ 3dc14e53

  • Edit in single-file editor

  • Edit in Web IDE


src/Language/ColumnFormula/Frontend/Tokens/SkipToken.php deleted
+ 0
- 35
  • View file @ 4f868cae

src/Language/ColumnFormula/Frontend/Tokens/SpecialSymbolToken.php
+ 3
- 35
  • View file @ 3dc14e53

  • Edit in single-file editor

  • Edit in Web IDE


src/Language/ColumnFormula/Frontend/ColumnFormulaParser.php
+ 0
- 10
  • View file @ 3dc14e53

  • Edit in single-file editor

  • Edit in Web IDE


src/Language/ColumnFormula/Frontend/ColumnFormulaScanner.php
+ 27
- 0
  • View file @ 3dc14e53

  • Edit in single-file editor

  • Edit in Web IDE


0 Assignees
None
Assign to
0 Reviewers
None
Request review from
Milestone
No milestone
None
None
Time tracking
No estimate or time spent
0
Labels
None
Assign labels
  • No matching results
  • Manage project labels
Lock merge request
Unlocked
1
1 participant
user avatar
Reference: Bingo/Language!10
Source branch: develop

    0 pending comments

Menu

Projects Groups Snippets
Help