2
아이러니 (나는 약 10 년 전 유니온에서 BNF를 배웠다.)를 처음 접했고, 준 실제 좌표 파서를 만드는 것으로 시작했다. 다음은 아이러니 문법 사양 오류
가 나는 문법 탐색기를 실행할 때, 그러나 입력을70 50' 44" N 1 13' 66" E
을 구문 분석 할 수 있었어야했는데 생각 문법 클래스 (https://github.com/spadger/notam-visualiser에서 전체 코드), 난 1에서 구문 오류 : 4 "expected : space"
내 코드에 어떤 문제가 있는지 알 수 있습니까?
감사합니다,
존
[Language("Simple non-real coordinates", "0.1", "A grammar to parse an imaginary coordinate system")]
public class CoordinateGrammar : Grammar
{
//70 50' 44" N 1 13' 66" E
public CoordinateGrammar()
{
#region Terminals
var integer = new NumberLiteral("integer", NumberOptions.IntOnly);
var space = ToTerm(" ", "space");
var point = ToTerm(".", "dot");
var lat = ToTerm("N", "north") | ToTerm("S", "south");
var lon = ToTerm("E", "east") | ToTerm("W", "west");
var minuteMarker = ToTerm("'", "minute");
var secondMarker = ToTerm("\"", "second");
#endregion
#region Non-Terminals
var decimalAmount = new NonTerminal("decimalAmount", typeof(DecimalAmountNode));
var minute = new NonTerminal("minute", typeof(MinuteNode));
var second = new NonTerminal("second", typeof(SecondNode));
var imperialMagnitude = new NonTerminal("decimalMagnitude", typeof (ImperialMagnitudeNode));
var imperialLatitude = new NonTerminal("imperialLatitude", typeof (ImperialLatitudeNode));
var imperialLongitude = new NonTerminal("imperialLongitude", typeof (ImperialLongitudeNode));
var imperialCoordinate = new NonTerminal("imperialCoordinate", typeof(ImperialCoordinateNode));
#endregion
#region Rules
decimalAmount.Rule = integer | integer + point + integer;
minute.Rule = integer + minuteMarker;
second.Rule = integer + secondMarker;
imperialMagnitude.Rule = integer + space + minute + space + second;
imperialLatitude.Rule = imperialMagnitude + space + lat;
imperialLongitude.Rule = imperialMagnitude + space + lon;
imperialCoordinate.Rule = imperialLatitude + space + imperialLongitude;
#endregion
Root = imperialCoordinate;
}
}