ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования лСксСра

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 ВокСнизация списка Ρ†Π΅Π»Ρ‹Ρ… чисСл Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ

<?php

use Parle\Token;
use
Parle\Lexer;
use
Parle\LexerException;

/* name => id */
$token = array(
"COMMA" => 1,
"CRLF" => 2,
"DECIMAL" => 3,
);
/* id => name */
$tokenIdToName = array_flip($token);

$lex = new Lexer;
$lex->push("[\x2c]", $token["COMMA"]);
$lex->push("[\r][\n]", $token["CRLF"]);
$lex->push("[\d]+", $token["DECIMAL"]);
$lex->build();

$in = "0,1,2\r\n3,42,5\r\n6,77,8\r\n";

$lex->consume($in);

do {
$lex->advance();
$tok = $lex->getToken();

if (
Token::UNKNOWN == $tok->id) {
throw new
LexerException("НСизвСстный Ρ‚ΠΎΠΊΠ΅Π½ '{$tok->value}' ΠΏΠΎ ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ {$lex->marker}.");
}

echo
"Π’ΠžΠšΠ•Π: ", $tokenIdToName[$tok->id], PHP_EOL;
} while (
Token::EOI != $tok->id);

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #2 Π’ΠΎΠΊΠ΅Π½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания

<?php

use Parle\{Token, Lexer};

$lex = new Lexer;

$lex->push("\$[a-zA-Z_][a-zA-Z0-9_]*", 1);
$lex->push("=", 2);
$lex->push("\d+", 3);
$lex->push(";", 4);

$lex->build();

$lex->consume('$x = 42; $y = 24;');


do {
$lex->advance();
$tok = $lex->getToken();
var_dump($tok);
} while (
Token::EOI != $tok->id);
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ добавляли примСчания для страницы