Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lexical analysis 在Gold Parser Builder中定义字符串/输入的长度_Lexical Analysis_Gold Parser - Fatal编程技术网

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

Lexical analysis 在Gold Parser Builder中定义字符串/输入的长度,lexical-analysis,gold-parser,Lexical Analysis,Gold Parser,我是一个使用Gold解析器引擎的新手,正在寻找一种方法来限制已定义的字符串的长度,但我没有找到任何方法来做到这一点。请帮我做那件事。这是我的密码 ! Welcome to GOLD Parser Builder "Case Sensitive"='false' "Start Symbol" =<start> {String Char}={Printable} <start>::=<Value> !<Value>::

我是一个使用Gold解析器引擎的新手,正在寻找一种方法来限制已定义的
字符串的长度,但我没有找到任何方法来做到这一点。请帮我做那件事。这是我的密码

    ! 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} 
!欢迎来到黄金解析器生成器
“区分大小写”='false'
“开始符号”=
{String Char}={Printable}
::=
!::=|a | b
:=名称编号|名称
::=int | float | char | double | boolean | String
名称={字母}{字母数字}+
::=';'
::='='
数字={Digit}+[.]{Digit}+{Digit}+{Letter}

我能解释一下字符串的最大限制吗。谢谢

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

为了说明这一点,我在官方网站上尝试:

"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
根据,可以从标记中检索文本:
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;

C#部件是否会生成gold解析器所需的内容?因为我不是一名C#开发人员,所以只需要澄清一下。我在GoldParser中寻找答案,但在C#中找到了答案。我将尝试在Java中实现这一点,因为我使用C#非常简单。好的。所以现在,不可能使用GOLD解析器引擎限制大小?是的。我说的是元语言。我应该使用JAVA或C语言的引擎来实现我想要的吗?我已经阅读了文档,但没有发现任何与我的问题相关的东西
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;