DATA 2 0.0 1.0
^ ここの数値で
^ ^ 後ろに何個取れるか変わる

見たいなのはBNFでは書けないわけかい(´・ω・`)?

数値リテラルを解釈するのはパースしてからの仕事みたいな気がしますね…(門外漢)

やっぱり内容を解釈する前に文法は決まらないといけないんですよね多分...(´・ω・`)

一応文脈自由文法で表せないことの証明とか試してみます

長いです 

単純化して L を
3|123, 2|15 など n|(n文字の列)
の集合とする

L を文脈自由とすると
反復補題から定まる反復長 p がある

ここで
w = 100...0 (p個) | 00...0 (10^p 個)
とすると |w| >= p なので、ある分割

w = uvxyz

があって
※1 |vxy| <= p
※2 任意の i に対し uv^ixy^iz in L
が成り立つ

vxy が | を跨がないと、※2 を考えたとき | の左辺か右辺のどちらかが一方的に大きくなり ※2 を満たさないので、vxy は | を跨ぐ

| in x でないと、※2を考えたときに | が増えるので | in x

したがって
v = 00...0 (m 個)
y = 00...0 (n 個)

ここで
uv^2xy^2z = 100...0 (p + m個) | 00...0 (10^p + n 個)

※2 から uv^2xy^2z in L なので

10^(p + m) = 10^p + n

が満たされる、明らかに n は 10^p の倍数であるが、これは ※1 |vxy| <= p を満たさない

ゆえに L は文脈自由ではない
ですかね

フォロー


最近学校で反復補題やったの使いたかっただけです :60fpsparrot:

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。