私は非常に単純な言語の割り当てで構成されたLALR文法を作成しようとしています。たとえば、次のようにLALR文法、末尾のコンマ、および複数行のリストの割り当て
foo = "bar"
bar = 42
また、例えば、値のリストを処理する必要があります言語:
foo = 1, 2, 3
しかし、私はまた、複数行のリスト処理したい:
foo = 1, 2
3, 4
カンマを末尾に(シングルトンと言語の柔軟性のため):
foo = 1,
foo = 1, 2,
そして、明らかに、両方同時に:
foo = 1,
2,
3,
私は、コンマまたは複数行のリストを末尾に文法を書くことができるんだけど、両方ではないため、同時に。
私の文法は次のようになります。
content : content '\n'
: content assignment
| <empty>
assignment : NAME '=' value
| NAME '=' list
value : TEXT
| NUMBER
list : ???
注:事前による
foo
=
"bar"
おかげで、
:私はこの種のコードを禁止する文法中の '\ n' のを必要としますアントワーヌ。
あなたは、JavaScript、Go、Scala(というよりも、私の頭の上にあるもの)がセミコロンを推論する方法を見てみることができます。しかし、これは改行(改行を越えて広がっている表現)につながり、かなりのプログラマーがそれを嫌っていることに注意してください。おそらく、より多くの制限を加えるべきです(例えば、 "parens/brakets/braces内の式だけが複数の行にまたがることができます"、これはPythonのことです)。 – delnan
実際、私の言語はプログラミング言語ではなく、構成形式なので、式はありません。私はリストの周りに何かを追加することを考えましたが、私はできれば私は好きではありません。 – Antoine
構文解析コードへのリンクを提供して、文法と一緒に遊んで、それがうまくいくかどうかを確認できますか? –