Syntax 实用的上下文相关编程结构示例

Syntax 实用的上下文相关编程结构示例,syntax,compiler-construction,programming-languages,formal-languages,context-sensitive-grammar,Syntax,Compiler Construction,Programming Languages,Formal Languages,Context Sensitive Grammar,因此,我正在实现一个上下文敏感的语法分析器。这是一种实验性的东西,我需要的东西之一是可用的和实用的句法结构来测试它 例如,以下示例无法使用标准CFG(上下文无关语法)进行解析。基本上,它允许声明多个不相关数据类型的变量并同时初始化它们 int bool string number flag str = 1 true "Hello"; 如果我省略一些细节,可以这样正式描述: L={anbncn | n>=1} 所以,我希望你们能想到很多类似的例子,但是,它们确实应该是实用的。实际程序员会欣赏的东

因此,我正在实现一个上下文敏感的语法分析器。这是一种实验性的东西,我需要的东西之一是可用的和实用的句法结构来测试它

例如,以下示例无法使用标准CFG(上下文无关语法)进行解析。基本上,它允许声明多个不相关数据类型的变量并同时初始化它们

int bool string number flag str = 1 true "Hello";
如果我省略一些细节,可以这样正式描述:

L={anbncn | n>=1}


所以,我希望你们能想到很多类似的例子,但是,它们确实应该是实用的。实际程序员会欣赏的东西。

几乎所有二进制格式都具有一定的上下文敏感性,最简单的例子之一是大量元素后跟一个长度不受限制的数组。(从技术上讲,如果可能的数组长度是一个有限的集合,这可以由CFG解析,但只能使用数十亿的产生式规则。)Pascal和其他语言传统上以这种方式表示字符串。程序员经常使用的另一种上下文敏感语法是二维源代码布局,它现在在预处理过程中被转换为中间CFG。对文档另一部分的引用,例如查找标签。图灵完整宏语言。不确定解析器应该识别哪种语言。

我认为您的示例已经不实用了。要直观地“解析”这一行需要相当多的努力,我不知道为什么
int bool string number flag str=1 true“Hello”
比更经典的顺序更方便,比如
int number 1,bool flag true,string str“hello”
。在使用变量之前只需声明一个变量怎么样?这是一个典型的例子,说明了编程语言的一个共同特性,它不是上下文无关的。@GolezTrol您可能是对的,您描述的语法更可读,但另一方面,它完全是无用的信息。这并不是说我会停止祈祷。。。一些实际的上下文相关示例会更好。还是你认为上下文相关的解析器功能不够强大?@Patrick87你当然是对的,但我目前更关注的是CFG的语法优势,而不是语义优势。不过,再次感谢你。@TeddParsile好吧,这就是为什么我的评论是评论而不是回答。无论如何,要坚持执行。无论如何,我想说的是,您给出的示例似乎故意很难阅读,而对于解析器来说,这应该没什么关系。我相信我的例子也是上下文的,只是遵循不同的上下文语法。