lexer grammar PgsqlLexer; @lexer::preinclude { #include } SemiColon: ';'; Comma: ','; Dot: '.'; OpenParen: '('; CloseParen: ')'; fragment A : [aA]; fragment B : [bB]; fragment C : [cC]; fragment D : [dD]; fragment E : [eE]; fragment F : [fF]; fragment G : [gG]; fragment H : [hH]; fragment I : [iI]; fragment J : [jJ]; fragment K : [kK]; fragment L : [lL]; fragment M : [mM]; fragment N : [nN]; fragment O : [oO]; fragment P : [pP]; fragment Q : [qQ]; fragment R : [rR]; fragment S : [sS]; fragment T : [tT]; fragment U : [uU]; fragment V : [vV]; fragment W : [wW]; fragment X : [xX]; fragment Y : [yY]; fragment Z : [zZ]; As: A S; By: B Y; Cross: C R O S S; From: F R O M; Full: F U L L; Group: G R O U P; Having: H A V I N G; Inner: I N N E R; Join: J O I N; Left : L E F T; Natural : N A T U R A L; On : O N; Order : O R D E R; Outer : O U T E R; Right : R I G H T; Select : S E L E C T; Using : U S I N G; Where : W H E R E; Ident: [\p{Alpha}]~[\p{White_Space}]* { setText(QString::fromStdString(getText()).toLower().toStdString()); } | '"' ~["]+ '"' { { std::string s = getText(); s = s.substr(1, s.length() - 2); setText(s); } }; IntegerLiteral: [1-9][0-9]*; StringLiteral: '\'' ('\'\'' | ~['])+ '\'' { setText(getText().substr(1, getText().length()-2)); }; Whitespace: [\p{White_Space}] -> skip ; // skip spaces, tabs, newlines UnexpectedSymbol: .;