小编duc*_*ck9的帖子

我应该在哪里绘制词法分析器和解析器之间的界限?

我正在为IMAP协议编写一个lexer用于教育目的,我很难在lexer和parser之间绘制线.以IMAP服务器响应为例:

* FLAGS (\Answered \Deleted)
Run Code Online (Sandbox Code Playgroud)

此响应在正式语法中定义如下:

mailbox-data   = "FLAGS" SP flag-list
flag-list      = "(" [flag *(SP flag)] ")"
flag           = "\Answered" / "\Deleted"
Run Code Online (Sandbox Code Playgroud)

由于它们被指定为字符串文字(也称为"终端"标记),因此词法分析器为每个标记发出唯一标记更为正确,例如:

(TknAnsweredFlag)
(TknSpace)
(TknDeletedFlag)
Run Code Online (Sandbox Code Playgroud)

或者发出类似这样的东西是否正确:

(TknBackSlash)
(TknString "Answered")
(TknSpace)
(TknBackSlash)
(TknString "Deleted")
Run Code Online (Sandbox Code Playgroud)

我的困惑是前一种方法可能使词法分析器过于复杂 - 如果\Answered在两个不同的上下文中有两个含义,则词法分析器不会发出正确的令牌.作为一个人为的例子(因为电子邮件地址用引号括起来不会出现这种情况),词法分析者如何处理像\ Answered@googlemail.com这样的电子邮件地址?或者,正式语法是否设计为永远不会出现这种歧义?

parsing imap lexer

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

如何在Oracle PL/SQL类型中定义无参数构造函数?

如何在Oracle PL/SQL类型中定义无参数构造函数?我试过这个:

create or replace type FooBar as object
(
    constructor function FooBar() return self as result
);

...

foo_bar := FooBar();
Run Code Online (Sandbox Code Playgroud)

但是类型声明中的空参数列表会引发PLS-00103.

sql oracle plsql

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

标签 统计

imap ×1

lexer ×1

oracle ×1

parsing ×1

plsql ×1

sql ×1