gpt4 book ai didi

lexical-analysis - 在 Gold Parser Builder 中定义字符串/输入的长度

转载 作者:行者123 更新时间:2023-12-04 15:40:05 28 4
gpt4 key购买 nike

我是使用 Gold Parser Engine 的新手,正在寻找一种方法来限制定义的 string 的长度,但我没有找到任何方法来做到这一点。请帮助德做到这一点/。这是我的代码

    ! Welcome to GOLD Parser Builder 
"Case Sensitive"='false'
"Start Symbol" =<start>
{String Char}={Printable}
<start>::=<Value>
!<Value>::=<>|a<Value>|b<Value>
<Value>::=<type>name<equal>number<symbol>|<type>name<symbol>
<type>::=int|float|char|double|boolean|String
name={Letter}{alphanumeric}+
<symbol>::=';'
<equal>::='='
number={Digit}+[.]{Digit}+|{Digit}+|{Letter}

有什么方法可以解释字符串的最大限制。谢谢

最佳答案

听起来解析器并非设计以使用正则表达式轻松处理词位大小。因此,您应该检查从您的语法程序生成的框架中的字符串大小。

为了说明,我尝试了 this very trivial grammar example来自官网:

"Name"         = 'String Terminal Example'
"Author" = 'Devin Cook'
"About" = 'This is a simple example which defines a basic string'

"Start Symbol" = <Value>

! The following defines a set of characters for the string. It contains
! all printable characters with the exceptionof the double-quotes used
! for delimiters. The {Printable} set does not contain newlines.

{String Ch} = {Printable} - ["]

! This statement defines the string symbol

String = '"' {String Ch}* '"'

<Value> ::= String

String 既作为终端标记 ( String = '"' {String Ch}* '"' ) 也作为规则 ( <Value> ::= String )。您可以在终端级别检查 token 大小。

我通过 Calitha Engine - Custom Parser class 模板生成了一个 C# 类,我得到了一个解析器。下面我找到了您应该检查字符串终端 token 的部分:

// [...]
private Object CreateObjectFromTerminal(TerminalToken token)
{
switch (token.Symbol.Id)
{
// [...]

case (int)SymbolConstants.SYMBOL_STRING :
//String
//todo: Create a new object that corresponds to the symbol
return null;

// [...]

}
throw new SymbolException("Unknown symbol");
}

根据Calitha Parser Engine documentation ,可以从 token 中检索文本: TerminalToken.Text 。那么为什么不按以下步骤进行:

case (int)SymbolConstants.SYMBOL_STRING :
// Check size (MAX_LENGTH could be a constant you defined)
if (token.Text.Length > MAX_LENGTH)
{
// handle error here
throw new SymbolException("String too long");
}
return token.Text;

关于lexical-analysis - 在 Gold Parser Builder 中定义字符串/输入的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58121685/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com