아이러니 라이브러리로 문맥 자유 문법을 사용하여 사용자 입력 접두사 표기법 논리 표현식을 구문 분석하려고합니다. 이것은 수업 과제를위한 것입니다. 만약 누군가이 일에 대해 전문가가되면, 저는 더 많이 알고 싶습니다. 나는 아이러니에 구현하고있어 문맥 자유 문법을 사용하여 식 트리에 이러한 구문 분석을 시도하고있어아이러니를 사용하여 접두사 표기법 구문 분석기 구현
and P Q -- (meaning P^Q)
or P Q -- (meaning P v Q)
not P -- (meaning ~P)
imp P Q -- (meaning P -> Q)
:
나는 다음과 같은 형식의 사용자 입력 논리식을 받아 들일 필요가있다. 내가 사용하고있어 문맥 자유 문법은 BNF에서, 여기에 있습니다 : 나는 어떤 이유로도 전에 대한 표현을 구문 분석하는 아이러니를 사용했습니다
<Expression> ::= <Not> | <And> | <Or> | <Implies> | <Identifier>
<Not> ::= "not" <Expression>
<And> ::= "and" <Expression> <Expression>
<Or> ::= "or" <Expression> <Expression>
<Implies> ::= "imp" <Expression> <Expression>
(<Identifier> is implemented as an IdentifierTerminal object).
, 나는 그것이 동작하지 않습니다. and P Q
이라는 표현식을 입력하면 식별자 터미널로 "및"을 식별하는 것으로 보이며 Andterminal의 일부가 아닙니다. 나는 명백한 것을하고 있을지도 모른다. 그러나 나는 그것을 간단히 이해할 수 없다. 여기에 내가 확장 된 언어 클래스입니다 : 여기
class LogicPrefix : Grammar
{
public LogicPrefix()
: base(false)
{
NonTerminal Expression = new NonTerminal("expression");
NonTerminal Implies = new NonTerminal("implies");
NonTerminal And = new NonTerminal("and");
NonTerminal Or = new NonTerminal("or");
NonTerminal Not = new NonTerminal("not");
Terminal Identifier = new IdentifierTerminal("identifier");
Root = Expression;
Expression.Rule = And | Or | Not | Identifier;
Not.Rule = "not" + Expression;
Implies.Rule = "imp" + Expression + Expression;
And.Rule = "and" + Expression + Expression;
Or.Rule = "or" + Expression + Expression;
}
}
가 그리고 것은 내 드라이버 클래스 :
class Program
{
static void Main(string[] args)
{
LogicPrefix grammar = new LogicPrefix();
Parser p = new Parser(grammar);
ParseTree pt = p.Parse("and P Q");
//pt has thrown an error flag.
}
}
제가 뭔가 잘못하고 있어요 경우 알려 주시기 바랍니다, 나는이에 대한 몇 가지 조언을 싶어요.
그래, :
당신이 다음 줄에 문장 부호로 당신의 연산자를 선언함으로써이 문제를 해결할 수있는 것처럼 나에게 보이는! 감사. 또한 And, Or, Not 및 Implies에 대한 규칙에서 공백을 제거해야했습니다. 그건 내 잘못이야. –