Ich habe ein Jison Stück Code, das wie folgt aussieht: bauenWie erkennt man eine neue Linie in Jison?
%lex
%options flex
%{
if (!('regions' in yy)) {
yy.regions = [];
}
%}
text [a-zA-Z][a-zA-Z0-9]*
%%
\s+ /* skip whitespace */
\n+ return 'NL';
"," return ',';
"-" return '-';
"[" return '[';
"]" return ']';
{text} return 'TEXT';
<<EOF>> return 'EOF';
/lex
%start expressions
%%
expressions
: content EOF
{
console.log(yy.regions);
return yy.regions;
}
| EOF
{
console.log("empty file");
return yy.regions;
}
;
content
: line NL content
{ console.log("NL"); }
| line content
{ console.log("no NL"); }
//| line NL
// { console.log("parsing line with NL"); }
| line
{ console.log("parsing line"); }
;
line
: '[' text ']'
{ yy.regions.push($2); $$ = $2; }
;
text
: TEXT
{ $$ = $1; }
;
Dies ist, was meine Eingabe wie im Moment aussieht (ich aus dem grundlegendsten Konstrukt begonnen, die mich mit und ich planen mochte es von dort):
[sectionA]
[sectionB]
[sectionC]
Das Problem, das ich habe, ist, dass die neue Zeile nicht erkannt wird. Es geht immer in die line content
und niemals in line NL content
. Später würde Ich mag, etwas zu analysieren, die mehr wie folgt aussehen:
[sectionA]
something1, something2, something3
something4, something5, something6
[sectionB]
something4, something5, something6
[sectionC]
something4, something5, something6
something4, something5, something6
something4, something5, something6
In Zukunft wird dies ein wenig komplizierter, aber meine ursprüngliche Idee war, zu Art es brechen zu pro-line-Basis (neue Linie würde in vielen Fällen als Trennzeichen dienen). Ich bin völlig neu in diesem Zeug, also könnte ich eine völlig falsche Vorstellung davon haben, wie man das löst. Meine Frage ist also, wie erkenne ich die neue Linie? Auch wenn es eine bessere Herangehensweise an das gibt, was ich versuche, ist jeder Rat mehr als willkommen. Vielen Dank.
\s+ /* skip whitespace */
\n+ return 'NL';
Da die erste erste ist, wird es gewinnen:
Es hat funktioniert. Danke vielmals. Es tut genau das, was ich brauche und die Antwort war im Allgemeinen ziemlich informativ. – pootzko