我正在读先生写的一章。。他的材料对我很有用,也很清楚。但在它之前我读了标准..。我看到EBNF的符号和语法由mr。理查德·E·帕蒂斯( Richard E. Pattis )在标准中不一样。我不明白为什么.
例如,standard写道:
a)引用语言的结束符号,以便任何字符,包括在扩展BNF中使用的字符,都可以定义为所定义语言的终端符号。
但是..。Pattis在自己的样本中不使用引号。此外,他还使用不方便的方式将非终端符号写入终端符号:例如,他放入框中的|字符(看起来就像MS中字符周围的边框)。通常的文本编辑器做不到。因此这种方式是不方便的。
此外,standard还写道:
( d
我有一些关于扩展BNF的问题。
(* Extended BNF grammar *)
min = 5;
max = 10;
value = integer; (* How can I set the range rule: `min <= value <= max`? *)
第二个问题:
name = letter, { letter | decimal digit };
(* The common length of the comment line must be not more than 128 characters.
But I don't know the n
有没有方法告诉忽略词法解析器中的内容?例如,为了
2022-01-18 11:33:21.9885 [21] These are strings that I need to egnore, until - MYKW - Start Active One: 1/18/2022 11:33:21 AM
我想告诉gocc从[21]一直忽略到until。以下是我一直在尝试的:
/* Lexical part */
_letter : 'A'-'Z' | 'a'-'z' | '_' ;
_digit : '0
我如何防止结构规则中的",“字面被解析为以下用于Instaparse的EBNF语法中的运算符?
语法:
structure = atom <"("> term ("," term)* <")">
term = atom | number | structure | variable | "(" term ")" | term operator term
operator = "," | ";" | "\\=" | "==
我使用的是Go 1.7.4。有没有什么方法可以验证字符串是否遵循特定的模板。例如,这里是我的字符串(请忽略,如果是,那么这些将被视为字符串的一部分)
IF NAME: A> B> C
AND AS: 10796
OR DIVISION: X> Y> Z
AND IP : 107.211.11.0/22
OR IP PREFIX: 66.144.0.0/16
THEN
#1: PASS(60%), FAIL(40%)
#2: PASS(40%), FAIL(35%), DISTINCTION(25%)
元素将是相同的,但出现的次数可以
根据这里的文档:和这里:,如果我想调用mysqlx::Table.select(),我需要构造一个ProjectedSearchExprStrList。
这个ProjectedSearchExprStrList是什么样子的!我在互联网上找不到任何例子。它与SearchConditionStr in TableSelect.where()有什么不同。
请给我一个完整的例子!谢谢!
我想使用扩展的(EBNF)上下文无关语法来定义一组无序的值。在EBNF中很容易定义一个无序的值列表,例如:
value = 'A' | 'B' | 'C';
list = value, {',', value};
然而,我怀疑它是否可以做一个无序的集合。
以下是有效的无序值集的示例:
A, B, C, D
A, B, D, C
A, D, C, B
...
D, C, B, A
虽然无效的名单是:
A, A, C, D
B, C, C, B
A, A, A, A
...
或者任意长度的列表。
A, A, B, C, D, A
A,
语法从定义上包含了非常简单的语法的例子:
E -> E + E
E -> n
我想在c#中实现语法类,但是我不知道如何存储产品,例如如何区分终端符号和非终端符号。我在想:
struct Production
{
String Left; // for example E
String Right; // for example +
}
左总是非终端符号(它是上下文无关的语法),但是生产的右侧可以包含终端和非终端符号。
现在我想到了两种实现方法:
非终端符号将使用括号编写,例如:
E+E将表示为字符串“E+E”创建附加数据结构NonTerminal。
我正在使用来转换我的ebnf定义。
ebnf def如下所示:
TEST = A, SPACE, A;
A = "AA" | "BB";
SPACE = " ";
如果我加载文件并尝试解析一个字符串,如下所示:
e = ebnf.parse(ebnf_file)
e['TEST'].leaveWhitespace().parseString('AA BB') # same without leaveWhitespace()
我得到了:
ParseException: Expected " " (a
我有一条BNF规则: <S> -> <A> b | <A> b <C>
<A> -> a | a <A>
<C> -> c | <C> c 我想把它变成EBNF规则,但是我对<A> and <C>中的左递归和右递归感到困惑,它在EBNF中有什么不同,还是它们是一样的? 下面是我所做的: To convert: <S> -> <A> b | <A> b <C> to EBNF
1. <S&
对来说可能是重复的,但是对我来说还不够具体。
python语法是,但我注意到中的一些表达式确实使我感到困惑,例如,下面的函数调用中的参数:
foo(a)
foo(a=a)
对应于以下语法:
argument: ( test [comp_for] |
test '=' test |
'**' test |
'*' test )
test在语法的第一个位置出现了两次。这意味着,仅仅通过查看test,Python无法确定它是test [comp_for]还是test '=&
例如,我有一个自我描述的数据集。前几条结构良好的记录定义了数据类型ID,其中包括记录的名称和长度,然后是内容记录,内容记录以数据ID开头,并根据ID的不同包含可变数量的数据。 使用BNF、EBNF或ABNF来描述定义记录将非常容易。但是,如何简洁地描述内容记录,其长度在定义记录中定义? 使用类似BNF的符号描述经典NetCDF数据格式的Here is an example,但不简洁,因为在早期的dim和var定义中没有将data recs的长度指定为数据的函数。