小编Lel*_*mbo的帖子

大多数PHP框架实际上是MVA而不是MVC吗?

许多PHP框架声称它们实现了MVC设计模式.但是,在它们的实现中,模型和视图彼此不了解,并且它们之间的每个通信必须通过控制器完成.正如我在维基百科中读到的,这是MVA(模型视图适配器)而不是MVC设计模式方法,因为在MVC中,模型和视图直接通信.

那些框架的主张是错误的还是我错过了什么?

php frameworks controller adapter

14
推荐指数
1
解决办法
1216
查看次数

语法与算子相关性之间的关系

一些编译器书籍/文章/论文谈论语法的设计及其运算符的关联性的关系.我是自上而下的狂热粉丝,特别是递归下降,解析器和迄今为止我编写的大多数(如果不是全部)编译器都使用以下表达式语法:

Expr   ::= Term { ( "+" | "-" ) Term }
Term   ::= Factor { ( "*" | "/" ) Factor }
Factor ::= INTEGER | "(" Expr ")"
Run Code Online (Sandbox Code Playgroud)

这是该BNF的EBNF表示:

Expr  ::= Term Expr'
Expr' ::= ( "+" | "-" ) Term Expr' | ?
Term  ::= Factor Term'
Term' ::= ( "*" | "/" ) Factor Term' | ?
Factor = INTEGER | "(" Expr ")"
Run Code Online (Sandbox Code Playgroud)

根据我所读到的,有些人认为这种语法是"错误的",因为操作员关联性的变化(这4个操作员从左到右)由不断增长的解析树向右而不是向左证明.对于通过属性语法实现的解析器,这可能是正确的,因为l-attribute值要求首先创建此值,然后传递给子节点.然而,当使用普通的递归下降解析器实现时,由我决定是先构造此节点然后传递给子节点(自上而下)还是先创建子节点然后将返回的值添加为此节点的子节点(通过在这个节点的构造函数中)(自下而上).我应该在这里找到一些东西,因为我不同意这句话说这个语法是"错误的",而且这种语法已被用于许多语言中.Wirthian的.通常(或全部?)表示它的读数会促进LR解析而不是LL.

parsing associativity operator-keyword

6
推荐指数
1
解决办法
1351
查看次数

重用语义分析阶段的符号表来生成代码

我目前正在为具有全局变量和嵌套子例程功能的语言构建编译器。以前,我只为只有局部变量而没有嵌套子例程的语言构建了一个编译器。

我在代码生成阶段如何重用在语义分析阶段填充的符号表有问题。我将符号表作为一个链表堆栈,其中每个链表代表在特定范围内声明的标识符。每次它进入一个范围时,都会创建一个新列表并将其推送到堆栈中,它成为当前范围。同样,每次离开作用域时,栈顶的列表都会被弹出。最后,在语义分析完成后,我实际上有空符号表,就像它开始时一样。但是,代码生成器需要一个完全填充的符号表才能正确生成代码。如何在不重新做语义分析期间所做的事情(即向符号表输入标识符)的情况下做到这一点?

compiler-construction code-reuse code-generation semantic-analysis symbol-table

1
推荐指数
1
解决办法
1154
查看次数