Are the grammars of modern programming languages context-free or context-sensitive?

∥☆過路亽.° 提交于 2019-11-27 06:01:18

问题


Are the C++, C# or Java languages context-free or context-sensitive?


回答1:


C++ is neither context-free nor context-sensitive, since the template system is Turing-complete and determining whether a piece of C++ code is legal C++ is undecidably hard. For example, I could define a template class that simulates a TM on a string and then creates a constant with value 1 if the machine accepts and 0 if it does not. If I did that, then the following code would be legal iff the TM halted on the given input:

int myArray[TMTemplate</* ... args ... */>::value];

Since if the TM rejects, this creates an array of size 0, which is not allowed.

Neither C# nor Java is context-free, because checking of whether a variable is used correctly and consistently throughout a particular scope is known not to be context-free (the proof is complex and relies on Ogden's lemma). However, I'm not sure whether or not they are context-sensitive.

Hope this gives a partial answer to your questions!



来源:https://stackoverflow.com/questions/9652436/are-the-grammars-of-modern-programming-languages-context-free-or-context-sensiti

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!