Completed
Pull Request — master (#175)
by Tom
05:04 queued 04:06
created

Literals   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 35
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Importance

Changes 0
Metric Value
wmc 12
lcom 0
cbo 1
dl 0
loc 35
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A tokenize() 0 17 3
B isLiteral() 0 7 5
A processLiterals() 0 6 4
1
<?php
2
namespace Transphporm\Parser\Tokenizer;
3
use \Transphporm\Parser\Tokenizer;
4
use \Transphporm\Parser\Tokens;
5
6
class Literals implements \Transphporm\Parser\Tokenize {
7
8
	public function tokenize(TokenizedString $str, Tokens $tokens) {
9
		$char = $str->identifyChar();
10
		if ($char === Tokenizer::NAME) {
11
12
			$name = $str->read();
13
			$j = 0;
14
15
			while ($this->isLiteral($j+1, $str)) {
16
				$name .= $str->read($j+1);
17
				$j++;
18
			}
19
			
20
			$str->move($j);
21
22
			$this->processLiterals($tokens, $name, $str);
23
		}
24
	}
25
26
	private function isLiteral($n, $str) {
27
		//Is it a normal literal character
28
		return ($str->has($n) && $str->identifyChar($n, $str) === Tokenizer::NAME
29
		//but a subtract can be part of a class name or a mathematical operation
30
				|| ($str->has($n) && $str->identifyChar($n) == Tokenizer::SUBTRACT && !is_numeric($str->read($n-1)))
31
			);
32
	}
33
34
	private function processLiterals($tokens, $name, $str) {
35
		if (is_numeric($name)) $tokens->add(['type' => Tokenizer::NUMERIC, 'value' => $name]);
36
		else if ($name == 'true') $tokens->add(['type' => Tokenizer::BOOL, 'value' => true]);
37
		else if ($name == 'false') $tokens->add(['type' => Tokenizer::BOOL, 'value' => false]);
38
		else $tokens->add(['type' => Tokenizer::NAME, 'value' => $name, 'line' => $str->lineNo()]);
39
	}
40
}