home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
ssvpar.zip
/
SSCALC.YHH
< prev
next >
Wrap
Text File
|
1994-12-01
|
6KB
|
230 lines
#if !defined( SSCALCSSHH)
# define SSCALCSSHH
# include<sslex.hpp>
# include<ssyacc.hpp>
# define ALexExpressionListMain 0
# define ALexExpressionListMLCom 1
# define ALexExpressionListSLCom 2
# define ALexEnd 4
# define ALexPlus 5
# define ALexMinus 6
# define ALexDiv 7
# define ALexMult 8
# define ALexMod 9
# define ALexPow 10
# define ALexOr 11
# define ALexAnd 12
# define ALexNot 13
# define ALexOParen 14
# define ALexCParen 15
# define ALexDec 16
# define ALexOct 17
# define ALexHex 18
# define AYaccStart 1
# define AYaccStartList 2
# define AYaccExprSingle 3
# define AYaccExprError 4
# define AYaccExprPlus 5
# define AYaccExprMinus 6
# define AYaccExprMult 7
# define AYaccExprDiv 8
# define AYaccExprMod 9
# define AYaccExprNot 10
# define AYaccExprAnd 11
# define AYaccExprOr 12
# define AYaccExprNested 13
# define AYaccExprNumber 14
# define AYaccNumberDec 15
# define AYaccNumberOct 16
# define AYaccNumberHex 17
class ALexClass : public SSLex
{
public:
SSConstr ALexClass( const char*);
const char* tokenToConstChar( SSUnsigned32);
};
ALexClass::ALexClass( const char* qpszFile) :
SSLex( qpszFile, "\\ss\\ycc\\sscalc.dfa")
{
}
const char* ALexClass::tokenToConstChar( SSUnsigned32 qulToken)
{
const char* zpchToken;
switch ( qulToken)
{
case ALexEnd:
zpchToken = ";";
break;
case ALexPlus:
zpchToken = "+";
break;
case ALexMinus:
zpchToken = "-";
break;
case ALexDiv:
zpchToken = "/";
break;
case ALexMult:
zpchToken = "*";
break;
case ALexMod:
zpchToken = "%";
break;
case ALexPow:
zpchToken = "**";
break;
case ALexOr:
zpchToken = "or";
break;
case ALexAnd:
zpchToken = "and";
break;
case ALexNot:
zpchToken = "not";
break;
case ALexOParen:
zpchToken = "(";
break;
case ALexCParen:
zpchToken = ")";
break;
case ALexDec:
zpchToken = "dec";
break;
case ALexOct:
zpchToken = "oct";
break;
case ALexHex:
zpchToken = "hex";
break;
case SSYaccErrorToken:
zpchToken = "%error";
break;
case SSYaccEofToken:
zpchToken = "eof";
break;
default:
zpchToken = SSLexTokenNotFound;
}
return zpchToken;
}
class AYaccClass : public SSYacc
{
public:
SSConstr AYaccClass( const char*);
SSYaccStackElement* reduce( SSUnsigned32, SSUnsigned32);
protected:
SSLex oLex;
};
AYaccClass::AYaccClass( const char* qpszFile) :
SSYacc("\\ss\\ycc\\sscalc.llr"),
oLex( qpszFile, "\\ss\\ycc\\sscalc.dfa")
{
setLex( oLex);
}
SSYaccStackElement* AYaccClass::reduce( SSUnsigned32 qulProd,
SSUnsigned32 qulSize)
{
switch ( qulProd)
{
case AYaccStart:
// start -> exprStatement
break;
case AYaccStartList:
// start -> start exprStatement
break;
case AYaccExprSingle:
// exprStatement -> expr ;
break;
case AYaccExprError:
// exprStatement -> %error ;
break;
case AYaccExprPlus:
// expr -> expr + expr
break;
case AYaccExprMinus:
// expr -> expr - expr
break;
case AYaccExprMult:
// expr -> expr * expr
break;
case AYaccExprDiv:
// expr -> expr / expr
break;
case AYaccExprMod:
// expr -> expr % expr
break;
case AYaccExprNot:
// expr -> not expr
break;
case AYaccExprAnd:
// expr -> expr and expr
break;
case AYaccExprOr:
// expr -> expr or expr
break;
case AYaccExprNested:
// expr -> ( expr )
break;
case AYaccExprNumber:
// expr -> number
break;
case AYaccNumberDec:
// number -> dec
break;
case AYaccNumberOct:
// number -> oct
break;
case AYaccNumberHex:
// number -> hex
break;
}
return stackElement();
}
#endif