我有一些关于扩展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
我想表达一个使用Lisp用BNF编写的语法规则。规则是这样的。必须指出,非终端机用大写字母表示,终端机用小写字母表示:
A -> a A b
我试着用lisp的定义函数来定义语法。但是,当我使用定义函数时,Lisp要求我指定我定义的函数的主体。
#lang racket
(define (A a A b B)())
然而,如果我用任何东西填满身体:
#lang racket
(define (A a A b B)("Hello World"))
我没有任何错误。
我在这里的问题是,我是否应该在主体中指定一些可以帮助我定义其他语法规则的东西,例如,我
我正在读先生写的一章。。他的材料对我很有用,也很清楚。但在它之前我读了标准..。我看到EBNF的符号和语法由mr。理查德·E·帕蒂斯( Richard E. Pattis )在标准中不一样。我不明白为什么.
例如,standard写道:
a)引用语言的结束符号,以便任何字符,包括在扩展BNF中使用的字符,都可以定义为所定义语言的终端符号。
但是..。Pattis在自己的样本中不使用引号。此外,他还使用不方便的方式将非终端符号写入终端符号:例如,他放入框中的|字符(看起来就像MS中字符周围的边框)。通常的文本编辑器做不到。因此这种方式是不方便的。
此外,standard还写道:
( d
我只写了下面的函数:
public string Ebnf {
get {
var props = GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
var ruleProps = from p in props where p.PropertyType.IsSubclassOf(typeof(ARule)) select p;
var rules = from p in ruleProps select (ARule)p.GetValue(this
我写一个GLR只是为了好玩(再说一次,因为我从上次尝试之后就明白了一些事情)。解析器现在可以工作了,我正在实现消歧规则。我正在以一种似乎有效的方式处理优先级。现在我对结合性有点迷惑了。
假设我有这样的语法:
E <- E '+' E (rule 1)
E <- E '-' E (rule 2)
E <- '0' (rule 3)
E <- '1' (rule 4)
其中规则1)和2)具有相同的优先级和左结合性。
如果没有关联性处理,字符串'1-1+0‘将生成两个解析树:
1
我有一条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 '=&