interitty/pacc 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

interitty/pacc

最新稳定版本:v1.0.12

Composer 安装命令:

composer require interitty/pacc

包简介

Parser generator (currently generates recursive descent parser and canonical LR(1) parser) for PHP.

README 文档

README

Parser generator (currently generates recursive descent parser and canonical LR(1) parser) for PHP.

Requirements

Installation

The best way to install interitty/pacc is using Composer:

composer require interitty/pacc

Usage

The executable script pacc is available in the Composer binary folder.

When no arguments are given, the Pacc expect the grammar definition from standard input and put result to standard output.

vendor/bin/pacc

Normaly the grammar definition is given via --input=<grammar file> argument or his short variant -i <grammar file>. When the output is expected to store in file, there is an --output=<output file> argument or his short variant -o <output file>.

vendor/bin/pacc -i vendor/interitty/pacc/examples/GrammarParser.y -o vendor/interitty/pacc/examples/GrammarParser.php

When the output file already exists, it can be usefull to use --force argument or his short variant -f.

When something wrong happens, it can be useful to increase the verbosity level.

Write parsers

Files consumed by pacc are structured like this:

grammar <<parser_name>>;

option <<option_name>> = <<option_value>>;

/**
 <<phpDoc>>
 */
@<<code>>
{
    <<php or yacc code>>
}

<<rules>>

Rules are compiled into PHP parser code, header and footer are left as they are.

pacc is compatible with YACC/Bison syntax for rules with the additional support of method return types. Each rule consists of its name, :, body, and ;. Name has to match regular expression [a-z][a-z_]*. The body consists of expressions separated by |. Each expression can have some attached PHP code between { and } .

For example:

numerical_operation
    : number '+' number { $$ = $1 + $3; /* $1 is first number, $2 is plus sign, and $3 is second number */ }
    | number '-' number : int { $$ = $1 - $3; }
    ;

In PHP code, you can use special variables like $$, $1, $2, $3, etc. In $$ is the saved result of an expression. Through numerical variables, you get a result of subexpressions.

These special variables can have optional return types and phpDoc types surrounded with <> between $ and the variable name like $<returnType#phpDocType>$. For example $<stdClass|null>1, $<?array|array<mixed>|null>2

Look for inspiration in the examples/ directory.

统计信息

  • 总下载量: 159
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2
  • 点击次数: 2
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2022-08-26

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固