Php 我想写一个特定用途的解析器/词法分析器,但我感到不知所措。你能帮我举个小例子吗?

Php 我想写一个特定用途的解析器/词法分析器,但我感到不知所措。你能帮我举个小例子吗?,php,parsing,blade,lexer,slim-lang,Php,Parsing,Blade,Lexer,Slim Lang,所以我正在编写一个php模板引擎,名为inspired by and 现在很多人建议我把它重写成一个lexer/解析器,而不是完全依赖正则表达式。所以我在谷歌上搜索了lexer和parser,试图了解它们是如何工作的,虽然我想我已经了解了大概的想法,但我仍然发现很难开始编写一个 所以我希望有人能在我的道路上帮助我,通过展示如何做一个例子。我该如何准确地理解lex(这是一个动词吗?)并解析它: #wrapper.container.well first-attr="a literal attrib

所以我正在编写一个php模板引擎,名为inspired by and

现在很多人建议我把它重写成一个lexer/解析器,而不是完全依赖正则表达式。所以我在谷歌上搜索了lexer和parser,试图了解它们是如何工作的,虽然我想我已经了解了大概的想法,但我仍然发现很难开始编写一个

所以我希望有人能在我的道路上帮助我,通过展示如何做一个例子。我该如何准确地理解lex(这是一个动词吗?)并解析它:

#wrapper.container.well first-attr="a literal attribute" second-attr=variable.name And here some text that will be the content of the div...
进入这些节点:

[
    'tagName' => 'div', // since there was no tagname, a div is assumed
    'attributes' => [
        'id' => 'wrapper',
        'class' => 'container well',
        'first-attr' => 'a literal attribute',
        'second-attr' => 'the value of the variable',
    ],
    'textContent' => 'And here some text that will be the content of the div...'
]

当然,我不希望任何人写出一个100%分析/解析这个函数的函数,但我想看看如何实现这一点的一般伪代码。有人能帮我吗?

首先,您的语法格式不正确,因为如果我的文本内容以
something=“blah”
@ircmaxell开头,那么它作为文本内容无效,并且将被假定为属性。我可以限制什么是有效的,什么是无效的,不是吗?这并不意味着您不能使用文本
something=“blah”
,您可以,但可以使用不同的方式,即在缩进的新行上使用文本,并以管道开始新行。建议:从正式定义语法开始。用于详细说明。此外,除非你非常小心,否则从新规则中推断空白(从新行开始)是很棘手的…哇,这是我迄今为止从未涉及过的计算机科学的一个完整分支。你知道有什么适合初学者的简单教程吗?嗨。我记得你最初在reddit上的帖子。我只是在谷歌上搜索了一下PHP解析器生成器,发现了PHP Peg。试一试:它至少会让你进入正确的心态。祝你好运